马的棋盘遍历的一个近似算法
来源:互联网 发布:淘宝上的碳纤维方向盘 编辑:程序博客网 时间:2024/05/17 07:28
马的棋盘遍历的近似算法
国际象棋中的马的遍历问题为:国际象棋中的马能否按照马步访问每一格点一次,最后再回到原地?由于国际象棋中的马又称为骑士,国际象棋中的马的遍历问题也称为骑士遍历问题。
在国际象棋棋盘中,骑士在选择下一个环游点时,共有8种可能的方案(如图所示)。除开其中已经游历的格点和棋盘外的格点,骑士一般还存在多种方案可供选择。对于每一个候选的格点,与之马步相连而还没有游历的棋盘内格点数是不相同的。如果骑士选择其中一个与外部联系最少的格点首先游历,那么,他有可能走的更远。因为对于当前与骑士马步相连的其它格点来说,由于它们与外界联系较多,以后还有机会通过其他格点进一步访问到,而对于与外界联系较少的格点,如果不立即访问,以后很难有机会进一步访问到。
2 1
3 0
*
4 7
5 6
形式化来看,假设一点(i,j)是否被访问用一个标记数组Travel[i][j]来表示,Travel[i][j]=1表示(i,j)已访问,Travel[i][j]=0表示(i,j)没被访问。对于一个格点(i,j),与之相连的格点为(i+x,j+y),其中x、y可能的组合如下:
遍历点 0 1 2 3 4 5 6 7
x 2 1 -1 -2 -2 -1 1 2
y 1 2 2 1 -1 -2 -2 -1
处于(i,j)点的骑士下一个可能的遍历点构成的集合为
P(i,j)={(i’,j’)|(i’,j’)与(i,j)马步相连,且Travel[i’][j’]=0,且(i’,j’)在棋盘内}
对于P(i,j)中的每一个元素(i’,j’),计算P(i’,j’)中的元素个数,若其中某个(i”,j”),P(i”,j”)中所含的元素个数最少,则选择(i”,j”)为下一个遍历点。
骑士能走多远,很大程度上依赖于初始位置的选择。对于8×8的棋盘,初始位置可以为(0,0)、(0,1)、(0,2)、(0,3)、(1,1)、(1,2)、(1,3)、(2,2)、(2,3)和(3,3),由棋盘的对称性,选择其它格点作为初始点没有什么新鲜性。当然,由于在骑士选择下一步游历点时,满足条件的(i”,j”)可能不只一个,而在选择时又总是选其中编号最大或最小的格点,这实际上是为骑士的选择引入了某种方向性,也可以说带有了某种偏见,这种偏见会破坏初始点的对称性,即在棋盘对称的两个初始点,它们的解不是对称的。
为了避开这种偏见,也可以从满足条件的一系列点中进行随机选择。当然,也可以将这种思路与回溯法结合在一起使用。
- 马的棋盘遍历的一个近似算法
- 图的遍历算法-马遍历棋盘
- 图的遍历算法-马遍历棋盘
- 马遍历棋盘算法
- 一个基于特征向量的近似网页去重算法
- 求点到线段的近似算法
- LIRS算法的近似实现
- LIRS算法的近似实现
- 组合方程的近似算法
- 马踏棋盘算法(回溯算法、X*Y图的邻接矩阵深度优先遍历)
- 【数据结构】马踏棋盘的遍历问题
- 马遍历棋盘高效算法(10*10),10*10以下的棋盘基本可以迅速计算出结果。
- 关于 马走棋盘 (骑士遍历)的深度优先算法
- 棋盘算法的实现
- 递归算法之马遍历棋盘问题
- 图着问题的DSATUR近似算法
- 单循环赛竞赛隔最大的近似算法
- 求近似根的算法-matlab实现
- 在Dialog中使用Menu和Toolbar
- 带爆炸效果的扫雷(源码4)
- VendorCache 类
- Window 消息大全
- learning jsp for the 2nd time
- 马的棋盘遍历的一个近似算法
- 数通产品线C语言编程基础题库
- PL/SQL表(oracle内存表)---table()函数用法
- 字节对齐和C/C++函数调用方式学习总结
- bat命令大全
- 外连接与union
- 在Windows下用colinux来boot硬盘上的linux系统!
- 带爆炸效果的扫雷(源码5)
- 大师,终见大师——中国"人工智能"泰斗涂序彦