`
tousin
  • 浏览: 8176 次
  • 性别: 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_游戏_围棋_围棋吃子_

    基于socket的在线围棋对战游戏,实现吃子,打劫,判定输赢等基础规则,实现悔棋、跳过、认输等基本操作

    Java Applet 围棋源程序

    Java Applet 围棋源程序 使用最简单的思想解决围棋吃子问题. 作者保留所有权利,禁止转载!

    使用不同的博弈树搜索算法解决计算机围棋的吃子问题 (2007年)

    使用 Alpha-Beta搜索和 proof-number ( pn)搜索解决计算机围棋的吃子问题。对吃子问题形式化并给出了简 单有效的评估函数。 Alpha-Beta搜索使用了包括置换表在内的各种扩展技术。 pn搜索使用了包括df-pn在内的4 种变...

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

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

    Unity围棋项目源码

    包含围棋的基本步骤, 吃子、打劫、上一步下一步。 可以用于布局死活的研究。

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

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

    java 围棋 代码

    java 围棋 代码 哦!下来看看哟

    Silverlight围棋单机版源码

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

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

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

    围棋学习v2.39版

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

    java实现的围棋基本算法

    java实现的围棋基本算法,实现围棋的基础功能,落子,切换棋手,吃子

    java围棋程序

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

    少儿围棋入门教程(整理版).pdf

    知道棋盘的基础知识:是方的有横竖各 19 道线, 361 个点。认得星和天元。...知道围棋术语六个:气,连,断,打吃,长,提。 记住:没有气的棋子一定要马上从棋盘上拿下来,注意克服不拿死子的习惯。

    围棋教学软件

    本软件适用于幼儿园围棋课使用!围棋入门课程~气 吃子技巧等

    围棋界面、走棋、吃子、打劫、禁入点等

    实现围棋的初步功能,能走棋,能提死子,不入气禁着点提醒,打劫等。尚未加入人工智能下棋的算法。可以对弈等。

    可联机的围棋对弈小程序

    学校课程设计想搞个围棋的,搜了很久,最后决定用这个,是由五子棋的代码改了一下,加入了搜集的吃子代码,本想通过数子的方式使其具有判断输赢的功能,但是还是失败了,不过此程序能基本实现围棋的落子吃子功能,能...

    创意围棋之水面之战android

    创意围棋系列更新,增加10个地图,...游戏玩法:玩家与ai各执一色棋子,玩家需要用四颗棋子在对方棋子的正上下左右方向站位且没有缺失一方,可吃ai一子,注意你的任务是想办法吃掉对方颜色不同的那颗棋子,然后过关!

    围棋(人人对战)

    支持吃子,悔棋,前进,实现人人对战。 使用了swing框架

    Java围棋程序源代码

    PS:功能介绍  游戏操作:左击下子,右击悔棋,双击吃子(本程序还无程序判断能力)  输入:输入选手名,然后点击“input”即可开始游戏,点击“Start”从新开始。

Global site tag (gtag.js) - Google Analytics