围棋博弈程序的实现与思考(5)——提子算法
提子算法的好坏对整个程序的性能影响是很大的。尽管在实际对局中,提子行为并不经常发生,但每次落子时计算机都得判断是否需要提子。根据围棋规则,可得提子算法的步骤,以黑棋落子为例:
1)依次判断与该落子点相邻的白子所在棋串(棋盘上实线相连的棋子集)的气,如为0,则提走棋串。
2)如果1)中不存在提子行为,则计算该落子点所在棋串的气是否为0,若不为0,则落子合法,若为0则不合法。
这只是个粗略的步骤,其中涉及到两个问题:1)怎样取得棋串。2)怎样计算棋串的气。
一个显而易见的方法是——需要时深搜棋串,顺便求出棋串的气。这个方法的巨大cost也是可以想见的,因为存在大量的重复计算。于是考虑在棋局进行过程中保存棋串的数据结构——一种解决方案是把一个棋串作为一个循环链表,棋子作为链表的结点。这是个不错的方法,因为棋串的合并操作可以方便地进行,但具体实行起来又会碰到些问题需要解决——比如怎样快速地通过一个棋子找到所在的棋串链表。
我的方案显得简单一些,把棋串作为并查集的树形结构,树根的坐标可作为树的标号。同样可以方便地进行棋串合并操作。棋串在棋局进行过程中保存气的坐标,棋串合并时只需作或运算。
围棋博弈程序的实现与思考(5)——提子算法相关推荐
- 围棋博弈程序的实现与思考(4)——棋盘的数据结构
UCT算法算是介绍完了,以后主要讲实践. 由于在面向对象的编程语言中,本人只会C++和Objective-C(以后也许会写一些iOS开发相关的博文),出于性能的考虑,选择C++是必然的.记得当初开题答 ...
- 围棋打谱程序之棋盘类(包括提子,子串搜索,打劫,禁手等判断)
? /**************************************************************************************/ ?* 功能:?棋盘 ...
- 较高人工智能的人机博弈程序实现(多个算法结合)含C++源码
较高人工智能的人机博弈程序实现(多个算法结合)含C++源码 本文由恋花蝶最初发表于http://blog.csdn.net/lanphaday 上,您可以转载.引用.打印和分发等,但必须保留本文完整和 ...
- 什么是经验--从程序员角度的思考
为啥会思考这个问题? 刚才在骑车回家的路上,脑子里突然闪过纪录片里关于爱因斯坦研究出相对论和他的大脑的关系.我就在想,他当时在思考时间和空间时,是不是因为他脑袋里面其实存在一个关于时间和空间的模块,只 ...
- 中国象棋的人机博弈程序
对此题目有兴趣的朋友们: 感谢你们抽出宝贵的时间来阅读这些浅显的文字. 很多人可能都知道chess的人机大战: 1996年,卡斯帕罗夫以4比2战胜"深蓝"(Deep Blue): ...
- 中国象棋棋盘java_Java中国象棋博弈程序探秘[2]——棋盘的表示
棋盘的表示 转载请保留作者信息: 作者:88250 MSN & Gmail & QQ:DL88250@gmail.com 在象棋博弈程序中,首先我们要确定下棋盘-棋子的数据结构描述. ...
- Java中国象棋博弈程序探秘[1]——博弈程序开发概述
博弈程序开发概述 转载请保留作者信息: 作者:88250 Blog:http:/blog.csdn.net/DL88250 MSN & Gmail & QQ:DL88250@gmail ...
- 如何像程序员一样去思考
如何像程序员一样去思考 如果你对编程感兴趣,你可能以前看过这句话: "这个国家的每个人都应该学习编程计算机,因为它教你思考." -史蒂夫·乔布斯 你可能还想知道,像程序员一样思考究 ...
- 程序员的人性思考(续)
"致虚极,守静笃",这是本人在<道德经>中很喜欢的一段话,浮沉乱世中,要守住自己的一份清明,不管做人.做事.学习.生活.工作上都会有所帮助. 人性思考目录: <程 ...
最新文章
- c语言的上级步骤,数据结构 上级程序一(C语言).doc
- 赛码网算法: 上台阶 ( python3实现 、c实现)
- !heap 和 _HEAP_ENTRY
- Logstash filter 插件之 grok
- codeforces 459 E. Pashmak and Graph(dp)
- LabView学习笔记——简易入门AND初级实战项目(计算器)
- Multisim 14.0安装包+详细安装步骤
- 自动采集电影网站PHP源码
- 通用mrp手机必备新手安装包
- Java5的倍数_关于java:将数字四舍五入到最接近的5的倍数
- 前台离岗提示语_安全温馨提示语大全.doc
- 中山大学计算机学院师资,中山大学计算机学院导师教师师资介绍简介-农革
- mysql8 Record Locks ,Gap Locks, Next-Key Locks实验2 唯一索引和非唯一索引,无索引情况
- 用于科学计算机的计算器特点是什么,科学计算器有哪些功能
- Qt学习笔记之Qt软件的打包发布
- 联想电脑安装Ubuntu后无法进入bios
- python 实现多核 CPU 并行计算
- 微信小程序wxml和wxss样式
- Nano 10GX—AD模块如何采集模拟量数据
- ST32/GD32嵌入式硬件开发总目录
热门文章
- ORACLE 取唯一数据
- 【35】WEB安全学习----XST攻击
- 我想给他拿给他拿台计算机的英文,NO-BOOK 傻瓜机英语口语中级版The machine can do the work of ten men.这机器...
- PCL学习--- stl转pcd
- sa-token使用简单使用
- 我的一个朋友想在这发自我介绍?!
- 网易推全球首个公正邮箱 破解电子邮箱出证难
- 学生台灯色温多少合适?2022双十一性价比最高的护眼台灯推荐
- 关于软考的备考心得体会
- SqlServer2012卸载并重新安装成功完整过程!真的超级激动...