题目:
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)); } } }
相关推荐
搜索算法解决计算机围棋的吃子问题.pdf
在本项目中,"baduk_游戏_围棋_围棋吃子_"是一个基于Socket技术开发的在线围棋对战平台。这个平台允许玩家通过网络进行实时的围棋对战,它包含了围棋的基本规则,如吃子、打劫以及胜负判断,并且提供了悔棋、跳过和...
本项目基于Java语言,旨在实现围棋的基本算法,包括落子、切换棋手和吃子等核心功能。以下是对这些关键知识点的详细阐述: 1. **围棋规则**:围棋是一种双人对弈的策略游戏,棋盘为19x19的网格,黑白双方轮流在交叉...
通过对这6000题的解答,玩家可以深入理解围棋的基本规则,如吃子、禁手、劫争等,并逐渐掌握更高级的战术,如挂角、拆边、夹击、打劫等。同时,通过不断挑战,玩家还能锻炼自己的棋感,培养全局观念,学会如何在复杂...
这通常包括棋盘的初始化、棋子的放置、吃子规则的判断、禁手规则的检查、胜负状态的计算等功能。一个完善的围棋类可能会包含多个方法,如`putStone`(落子)、`checkWin`(检查胜利条件)、`undoMove`(悔棋)等。...
2. **基本规则**:包括吃子、提子、禁着点等,这些都是初学者必须了解的基本规则。同时,还会涉及死活棋的概念,这是判断棋子生存状态的关键。 3. **布局基础**:介绍开局的基本布局策略,如星位、小目、高目等常见...
1. **吃子手段**:包括双打、征子、缓征、枷、接不归、扑、倒扑、滚打包收、金鸡独立、倒脱靴等,这些是围棋中获取对方棋子的常用策略。 2. **死活要点**:理解棋子的活棋条件,例如制造两个真眼,以及不同棋形的...
2. **吃子**:当一方的棋子被完全包围时,这些棋子会被移除棋盘。这个过程需要检查棋子周围的相邻位置,判断是否存在连续的同色棋子。 3. **打劫**:围棋中的特殊规则,如果一方提掉对方一颗棋子后,对方立即可以回...
2、优化了人工智能两步吃子和三步吃子算法的设计,使之能根据吃子数目多少选择落子点。 2009-4-7 围棋学习1.15版相对于1.14版更新说明: 1、改进了打开文件和保存文件时的初始目录和文件命名操作,使之更智能化...
绘制棋盘,鼠标控制下棋,并且实现吃子功能
在Java编程语言中实现围棋游戏是一项有趣的挑战,它涉及到数据结构、算法以及人工智能(AI)的概念。围棋是一种源自中国的古老策略棋类游戏,其规则简单但策略深邃,因此在编程实现时需要精心设计。 首先,我们需要...
于是这两天就先研究了一下单机版的围棋功能,主要是涉及到围棋对弈中的一些核心算法,比如吃子、打劫、悔棋、数目等。 经过一些探索与测试,这些算法也相继得到了实现,于是就形成了现在的单机版,除了对弈功能,还...
2、修正了基础智能类三步包吃和三步吃子算法中第2步可能不入子的疏忽。 2010-11-14 围棋学习2.38版相对于2.36版更新说明: 1、修正了基础智能类眼形算法对2路眼位的对角1路空点的忽略,并优化了一路眼位的成眼...
在本主题中,我们将其应用于围棋游戏,特别是实现数气和禁手吃子的规则。数气是围棋中计算棋子生死的重要环节,而禁手规则则限制了某些特定的下法。 首先,我们要理解围棋的基本规则。棋子分为黑白两色,每方各执一...
功能主要有: <br>* 个人自己下围棋 (意即人和人下围棋) * 落子, 吃子, 及时间的纪录 * 自动判断吃子, 打劫, 非法落子, 等等 * 无限步的悔棋功能 * (New!) 棋末记地(算目) (采用日式规则, 是...
初级课程注重基础教学,包括棋子的放置、吃子规则、常见的布局模式等;中级课程则涉及更复杂的战术和策略,如挂角、拆边、打入等;高级课程则包含定式、死活题和对局分析,让玩家深入理解围棋的深度和广度。 在...
棋子对象包含了颜色(黑或白)和位置等属性,以及可能的行为如移动、吃子等。这将涉及类的设计、构造函数、属性和方法的定义。此外,可能会有专门的类来管理游戏状态,如检查胜负、记录历史步数等。 在游戏逻辑方面...
3. **下棋规则**:源码中会包含围棋的基本规则,如落子、提子(吃子)、禁手规则(如双禁手、三三禁手等)的实现。这些规则的实现涉及到棋盘状态的更新和合法性检查。 4. **游戏状态管理**:源码会提供方法来处理...
3. **吃子逻辑**:根据围棋规则,当一方的棋子被另一方的棋子包围时,这些棋子会被吃掉。程序需要检查每次下棋后是否存在吃子的情况,并进行相应的更新。 4. **游戏状态判断**:程序会检查游戏是否结束,通常有以下...