`
tousin
  • 浏览: 8631 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论

围棋吃子问题

阅读更多

题目:

Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'.

A region is captured by flipping all 'O's into 'X's in that surrounded region .

For example,

X X X X
X O O X
X X O X
X O X X

 

After running your function, the board should be:

X X X X
X X X X
X X X X
X O X X

代码:

import java.awt.*;

public class Solution {
    char[][] board;
    int r,c;
    
    public void solve(char[][] board) {
        // Start typing your Java solution below
        // DO NOT write main() function
        if(board == null || board.length <= 0)
            return;
            
        this.board = board;
        r = board.length;
        c = board[0].length;
        
        for(int i=0;i<r;i++){
            mark(i,0);
            mark(i,c-1);
        }
        
        for(int i=0;i<c;i++){
            mark(0,i);
            mark(r-1,i);
        }
        
        for(int i=0;i<r;i++){
            for(int j=0;j<c;j++){
                this.board[i][j] = this.board[i][j] == 'O'?'X':this.board[i][j] == 'A'?'O':'X';
            }
        }
    }
    
    private void mark(int x,int y){
        if(x<0 || y<0 || x>=r || y >=c || this.board[x][y] != 'O')
            return;
        
        this.board[x][y] = 'A';
        
        Queue<Point> s = new LinkedList<Point>();
        
        s.add(new Point(x-1,y));
        s.add(new Point(x+1,y));
        s.add(new Point(x,y-1));
        s.add(new Point(x,y+1));
        
        while(!s.isEmpty()){
            Point p = s.poll();
            x = p.x;
            y = p.y;
            if(x<0 || y<0 || x>=r || y >=c || this.board[x][y] != 'O'){
                continue;
            }
            
            this.board[x][y] = 'A';
            s.add(new Point(x-1,y));
            s.add(new Point(x+1,y));
            s.add(new Point(x,y-1));
            s.add(new Point(x,y+1));
        }
    }
}

 

0
0
分享到:
评论

相关推荐

    搜索算法解决计算机围棋的吃子问题.pdf

    搜索算法解决计算机围棋的吃子问题.pdf

    baduk_游戏_围棋_围棋吃子_

    在本项目中,"baduk_游戏_围棋_围棋吃子_"是一个基于Socket技术开发的在线围棋对战平台。这个平台允许玩家通过网络进行实时的围棋对战,它包含了围棋的基本规则,如吃子、打劫以及胜负判断,并且提供了悔棋、跳过和...

    java实现的围棋基本算法

    本项目基于Java语言,旨在实现围棋的基本算法,包括落子、切换棋手和吃子等核心功能。以下是对这些关键知识点的详细阐述: 1. **围棋规则**:围棋是一种双人对弈的策略游戏,棋盘为19x19的网格,黑白双方轮流在交叉...

    围棋段位测试6000题

    通过对这6000题的解答,玩家可以深入理解围棋的基本规则,如吃子、禁手、劫争等,并逐渐掌握更高级的战术,如挂角、拆边、夹击、打劫等。同时,通过不断挑战,玩家还能锻炼自己的棋感,培养全局观念,学会如何在复杂...

    网上围棋单机版

    这通常包括棋盘的初始化、棋子的放置、吃子规则的判断、禁手规则的检查、胜负状态的计算等功能。一个完善的围棋类可能会包含多个方法,如`putStone`(落子)、`checkWin`(检查胜利条件)、`undoMove`(悔棋)等。...

    围棋(中国围棋协会培训中心指定教材)第一册

    2. **基本规则**:包括吃子、提子、禁着点等,这些都是初学者必须了解的基本规则。同时,还会涉及死活棋的概念,这是判断棋子生存状态的关键。 3. **布局基础**:介绍开局的基本布局策略,如星位、小目、高目等常见...

    围棋初学教材 围棋初学教材

    1. **吃子手段**:包括双打、征子、缓征、枷、接不归、扑、倒扑、滚打包收、金鸡独立、倒脱靴等,这些是围棋中获取对方棋子的常用策略。 2. **死活要点**:理解棋子的活棋条件,例如制造两个真眼,以及不同棋形的...

    Unity围棋项目源码

    2. **吃子**:当一方的棋子被完全包围时,这些棋子会被移除棋盘。这个过程需要检查棋子周围的相邻位置,判断是否存在连续的同色棋子。 3. **打劫**:围棋中的特殊规则,如果一方提掉对方一颗棋子后,对方立即可以回...

    围棋学习v1.38版开源共享

     2、优化了人工智能两步吃子和三步吃子算法的设计,使之能根据吃子数目多少选择落子点。 2009-4-7 围棋学习1.15版相对于1.14版更新说明:  1、改进了打开文件和保存文件时的初始目录和文件命名操作,使之更智能化...

    go_Go_围棋并吃子功能_鼠标控制_

    绘制棋盘,鼠标控制下棋,并且实现吃子功能

    java 围棋 代码

    在Java编程语言中实现围棋游戏是一项有趣的挑战,它涉及到数据结构、算法以及人工智能(AI)的概念。围棋是一种源自中国的古老策略棋类游戏,其规则简单但策略深邃,因此在编程实现时需要精心设计。 首先,我们需要...

    Silverlight围棋单机版源码

    于是这两天就先研究了一下单机版的围棋功能,主要是涉及到围棋对弈中的一些核心算法,比如吃子、打劫、悔棋、数目等。 经过一些探索与测试,这些算法也相继得到了实现,于是就形成了现在的单机版,除了对弈功能,还...

    围棋学习v2.39版

     2、修正了基础智能类三步包吃和三步吃子算法中第2步可能不入子的疏忽。 2010-11-14 围棋学习2.38版相对于2.36版更新说明:  1、修正了基础智能类眼形算法对2路眼位的对角1路空点的忽略,并优化了一路眼位的成眼...

    面向对象程序设计(围棋-数气禁手吃子).ppt

    在本主题中,我们将其应用于围棋游戏,特别是实现数气和禁手吃子的规则。数气是围棋中计算棋子生死的重要环节,而禁手规则则限制了某些特定的下法。 首先,我们要理解围棋的基本规则。棋子分为黑白两色,每方各执一...

    java围棋程序

    功能主要有: &lt;br&gt;* 个人自己下围棋 (意即人和人下围棋) * 落子, 吃子, 及时间的纪录 * 自动判断吃子, 打劫, 非法落子, 等等 * 无限步的悔棋功能 * (New!) 棋末记地(算目) (采用日式规则, 是...

    带使用教学的围棋西游记

    初级课程注重基础教学,包括棋子的放置、吃子规则、常见的布局模式等;中级课程则涉及更复杂的战术和策略,如挂角、拆边、打入等;高级课程则包含定式、死活题和对局分析,让玩家深入理解围棋的深度和广度。 在...

    围棋源代码java

    棋子对象包含了颜色(黑或白)和位置等属性,以及可能的行为如移动、吃子等。这将涉及类的设计、构造函数、属性和方法的定义。此外,可能会有专门的类来管理游戏状态,如检查胜负、记录历史步数等。 在游戏逻辑方面...

    围棋基类源码.zip

    3. **下棋规则**:源码中会包含围棋的基本规则,如落子、提子(吃子)、禁手规则(如双禁手、三三禁手等)的实现。这些规则的实现涉及到棋盘状态的更新和合法性检查。 4. **游戏状态管理**:源码会提供方法来处理...

    Java Applet 围棋源程序

    3. **吃子逻辑**:根据围棋规则,当一方的棋子被另一方的棋子包围时,这些棋子会被吃掉。程序需要检查每次下棋后是否存在吃子的情况,并进行相应的更新。 4. **游戏状态判断**:程序会检查游戏是否结束,通常有以下...

Global site tag (gtag.js) - Google Analytics