独立钻石Solitaire算法求解
关键字
茶余饭后,休闲娱乐, 独立钻石,solitaire,DFS,剪枝。
摘要
茶余饭后,休闲娱乐。
百度略为查找,算法实现很多,但并不认为很多实现在实践中可以在有限的内存、可接受的时间内,得出结果。
在实验环境 [1]中,20s得到第一个解。内存使用2G Bytes多。
交换p1, p2顺序,306秒得到第一个解。
连跳算1步的话,在目前方法中,只找到最好20步解。
问题
棋盘如下,感谢金涬博士和我一起无聊,并赠送实物跳棋。
日常跳棋规则,110跳为001。
目标,从中心为0,跳到最后只剩1个子在中心。(独立钻石名称由此而来)
算法实现
DFS无可争议。先不考虑连跳,找到解时,需要31部;搜索规则为,针对当前盘面的0(空格)(搜索0和搜索1是对称的),尝试4个方向。需要保存当前盘面和当前动作,作为搜索回溯记录。
时间复杂度极高(O(n!)),需要考虑可接受时间内得到解。
剪枝,对任意盘面,根据规则不变性,如果其后续搜索无法得到解,则,当再次碰到该盘面时,无须搜索。