CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  专题开发/技术/项目 >  数据结构与算法

围棋提子算法

楼主ycheng677()2006-06-08 13:36:29 在 专题开发/技术/项目 / 数据结构与算法 提问

求围棋提子、打劫算法,最好是VB做的.有详细实现步骤的。 问题点数:100、回复次数:13Top

1 楼treeroot(旗鲁特)回复于 2006-06-08 15:23:21 得分 0

我看过c++实现的,自己用java做过  
  Top

2 楼chenzhichao2008(陈智超)回复于 2006-06-13 07:55:49 得分 0

不懂,帮顶Top

3 楼soholi(天涯孤棹)回复于 2006-06-26 12:45:23 得分 0

顶一下Top

4 楼JasonHeung(拥有一切不过就这样笑着哭)回复于 2006-06-27 15:30:18 得分 0

我有C++的Top

5 楼Kvci(看了不笑就没小JJ同时又比较长的昵称__——————————————————————————————)回复于 2006-06-27 21:55:12 得分 0

你搜索gungo  
  这个是开源围棋项目  
  不但有你要的那些  
  还有走棋智能算法Top

6 楼Kvci(看了不笑就没小JJ同时又比较长的昵称__——————————————————————————————)回复于 2006-06-27 21:58:53 得分 0

计算机围棋网  
  http://www.computergo.net  
   
  论坛里有个他们的群,围棋棋盘的实现程序应该早有了  
   
  里面有几篇文章还不错的  
   
  墨绿    
  http://www.computergo.net/index.php?option=com_content&task=view&id=9&Itemid=7  
   
  GNUGo   文档   -   3.   GNU   Go   综述    
  http://www.computergo.net/index.php?option=com_content&task=view&id=8&Itemid=7Top

7 楼wuhuabucai(混乱)回复于 2006-07-25 23:25:56 得分 0

楼上的不错Top

8 楼Preamble(Rubbish)回复于 2006-07-27 01:33:17 得分 0

但是有一个问题,比如A与B对弈,A已经输了,但是A拒不承认,要求继续下,  
  可是B的围城的空白处实际比A少,所有一直下下去,就是A胜(所有的B棋都被消灭了)  
   
  再极端的,现在所有的B棋都被消灭了 ,B还要继续下, 二人一直下,除非A所有都是活口,B就可以继续下,A也就有可能再次被B全部提掉。  
   
  重复以上N   次,无法输赢。!!!  
   
  所有最大问题:  
  如何判断A输了?  
   
  总不能一直下到最后一个空白吧,  
  因此需要边界检测,   还需要检测到死棋与活棋,好难啊。Top

9 楼soholi(天涯孤棹)回复于 2006-12-08 08:50:20 得分 0

这种事情我碰到过,然后自己也做过,呵呵  
  后来我好像发现,只要是赢的,始终是赢的,只需填子的时候稍微注意下次序就行了吧Top

10 楼LiChenYue(卐)(李忱悦)(怎堪蔑拒?鳄泪横流㊣暗恋未遂!独孤求偶)(卐)回复于 2007-03-19 14:05:03 得分 0

围棋的不好做,但五子棋的就有不少原马。Top

11 楼yuxing_hui()回复于 2007-03-19 16:28:56 得分 0

/*    
            Xin.Yu@polycom.com  
  */  
  我以前也思考过这个问题,现在有一个解决方法,希望大家斧正。  
   
  1.每一粒棋都属于一个堆,所有相连的同色棋属于同一个堆。  
  比如假设第一粒白棋属于堆1,随后又下了一粒白棋并且这两个棋相连(判断两粒棋是否相连  
  很简单,就不说了),那第二粒棋也属于堆1。  
   
  2.每一粒棋会给它所属的堆增加或者减少度,度是指单粒棋子或者堆的活孔数目,当一个堆的  
  活孔数目为0时,所有属于这个堆的棋子都应该被拿掉。  
   
  举个例子,当下了一颗白棋后,要先判断这个白棋上下左右四个方向是否有棋,如果有棋,则  
  将相邻棋子所属的堆的度数减一,如果某个堆属于黑棋,并且因为这个白棋的加入而使其度为0,则这个黑棋堆是死棋,应该拿掉,  
   
  然后计算出这颗棋子自己的度,棋子的度初始为4,每有一个  
  棋子与它相邻,则减一,如果有四个棋子与它相邻,那它的度就是0了,  
  最后找出这个棋子属于  
  那个堆(通过查找相邻同色棋子的堆号即可得到),把这个堆的度加上将这个棋子的度,即得  
  到这个堆加入了新棋子后的新的度数,如果度数为0,则这个堆的棋子是死棋,应该拿掉。  
   
  3.还有一个麻烦点的地方就是当要拿掉一堆棋子时,需要调整与相临的反色堆的度。  
  这个可以通过记录堆中每一个棋子是否与反色棋子相邻,也可以  
  把一个堆中所有与反色棋子相邻的棋子记录在链表里。  
   
  思路不是很严谨,仅供参考,欢迎讨论Top

12 楼oo(为了名副其实,努力学习oo技术ing)回复于 2007-03-20 08:49:45 得分 0

但是有一个问题,比如A与B对弈,A已经输了,但是A拒不承认,要求继续下,  
  可是B的围城的空白处实际比A少,所有一直下下去,就是A胜(所有的B棋都被消灭了)  
   
  再极端的,现在所有的B棋都被消灭了 ,B还要继续下, 二人一直下,除非A所有都是活口,B就可以继续下,A也就有可能再次被B全部提掉。  
   
  重复以上N   次,无法输赢。!!!  
   
  所有最大问题:  
  如何判断A输了?  
   
  总不能一直下到最后一个空白吧,  
  因此需要边界检测,   还需要检测到死棋与活棋,好难啊。  
  ============================================================  
  在网上下棋的时候碰到n次这样耍赖的人,都被俺搞定,哈哈  
  填子的时候要注意多做一些一目的眼,同时尽量让对方少做成一目的眼,因为一目的眼自己能填,对方不能填,到最后对方会无棋可下。  
   
   
  Top

13 楼mLee79()回复于 2007-03-20 10:12:41 得分 0

应该该找网管/裁判啊,   oo   的耐心太好了,   要是包干用时的时间很紧张这样搞超时负岂非很无趣   ...  
  围棋规则里是可以虚手的,   不会有B把自己的眼填死的问题   ..  
  貌似中国规则,应氏规则里往自己空里填子不影响胜负,   日本规则里每填一子损一目,   他喜欢填填就是   ...  
   
  提子算法应该比较简单,   打劫规则用   "禁全局同形"   实现起来简单些   ..Top

相关问题

关键词

得分解答快速导航

  • 帖主:ycheng677

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo