围棋提子算法
求围棋提子、打劫算法,最好是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




