围棋提子算法 围棋规则

围棋提子算法


主题词:图,数据结构,递归,分支结构,堆栈,入口坐标恢复,遍历路径

最近用c#语言做围棋打谱软件,想做一个比较全面的围棋提子函数。以前做的是单侧的围棋提子函数,很简明,分左上右下四个方向调用四次围棋提子函数,就可以解决围棋提子问题。如今,自我感觉编程水平提高了,就想调用 一次围棋提子函数就解决围棋提子问题。综合的围棋提子函数主要就是在递归算法里加入分支判断。

围棋盘是图结构,可以映射成数组或者线性链表。围棋提子问题可以抽象为对图的深度优先遍历问题。我采用递归调用进行深度优先遍历,再用分支结构解决围棋提子判断。
围棋提子判断的主要问题集中在:
1,添加分支标记和判断。因为一颗棋子要进行左上右下四个分支的判断和递归调用。
2,递归调用时入口坐标的保存和恢复。多层递归调用会出现棋子坐标的转移。需要保存和恢复每次调用时的入口棋子坐标。用堆栈的方法处理入口棋子坐标很简明有效。
当然,一个完整无错的围棋提子函数,还要解决边界判断,禁入点,打劫等问题。一般用穷举法就可以解决,比如将所有边界的类型都罗列出来,然后逐一判断解决就可以了。
围棋提子算法 围棋规则
将代码块封装为函数,一般要求该函数的功能尽量单一化,如此也有利于代码复用。一个函数里复合了多个功能,这个函数的用途就很有限了。
我把所有四个方向的围棋提子判断放在一个函数里解决,无非是测试一下自己的编码水平,这并不是好的解决方案。这样做,编码的错误率高了很多,调试排错也很浪费时间。现在还在调试排错进行中......无语。不过,如

果成功,对于提高思维的缜密程度,是一次很好的练习。
周末集中上围棋课,没有时间写代码。周一上午重新调试围棋提子算法,主要是功能和逻辑错误,错误原因是对分支标记的处理有疏漏之处。得到的经验是:标志位的赋值,遍历用的暂时链表的更新,最好放在递归调用的前

后及时处理。围棋提子判断之后,要将棋盘链表初始化。否则,会影响下一次提子判断。


小结:
1、有四个分支的递归函数,if_else嵌套常常达到5层以上,代码结构复杂,逻辑关系复杂,编码时很容易出错。代码的调试和维护也很困难。
2、实用的代码应该是:函数功能单一,代码结构简明,逻辑关系清晰,易于维护和调试。
3、编写成功有分支结构的围棋提子函数,对自己的复杂逻辑思维和调试代码的耐心是一次很好的锻炼。

  

爱华网本文地址 » http://www.aihuau.com/a/25101016/296012.html

更多阅读

精英女性学围棋——小曼手谈社现身上海 win10版 手谈围棋5.0

昨天下午,“小曼手谈社——精英女性围棋公益培训班”在上海延华智能公司首次开课,上海棋院副院长刘世振七段、美女棋手王香如初段、女子围甲创始者马小曼等,将为来自商界、文艺界30余名毫无围棋基础的女性精英、名流,教授围棋入门知识,展

围棋难学么?教你围棋的规则与玩法 围棋游戏玩法

围棋难学么?教你围棋的规则与玩法——简介围棋起源于中国古代,推测起源时间为大约公元前6世纪。是一种策略性二人棋类游戏 (也有联棋或团队对战模式,有二人对二人、一人对多人、多人对人多等形式),使用格状棋盘及黑白二色棋子进行对弈。中

怎么样下围棋 中国围棋怎么下

怎么样下围棋——简介围棋的棋盘纵横各19道,共有361个交叉点(着点)。棋子分黑白两种颜色,黑子181个,白子180个。由执黑棋的人先走,轮流把棋子下在交叉点上,以占领交叉点多的一方获胜。为要争取较多的交叉点,双方就必须设法“围地”和“围

转载 围棋电子书一 围棋定式大全电子书

原文地址:围棋电子书一作者:吴沾吟围棋电子书下载总目(二)十九、T谈子的死与活_坂田荣男.pdf谈子效分析_小林光一.pdf桃花泉弈谱(中国古典围棋丛书)_[清]范西屏.pdf套手解套法_坂田荣男 (台版).pdf腾挪技巧(围棋现代技艺丛书)_华伟荣

北控给谢依旻浇了一盆冷水_围棋名人 北控水务集团

#周睿羊围棋#伊卡迪尔扳回一球伊卡尔迪安慰球    北京时间9月28日2时45分(意大利当地时间27日20时45分),意甲第6轮上演榜首大战。下半时开始后,紫百合打得有些保守,国米第60分钟追回一分!特莱斯左路任意球斜传,伊卡尔迪前点距门7

声明:《围棋提子算法 围棋规则》为网友澄澈未谢分享!如侵犯到您的合法权益请联系我们删除