骑士游历问题

原创 2012年05月02日 23:41:00

骑士游历问题

求解骑士游历问题
显然求解骑士游历问题的每一步就是马在棋盘上走的一步。在每一步马需要选择一个方向进行游历,这时记住解的每一步需要记住两件事:
1.当前步的行列位置
2.当前步已经试探过哪些方向了,以便回溯回来时能够选择一个新的方向进行试探


所以使用两个数组,数组board记住棋盘的每个位置是在马的第几步到达的,这反映了问题的解,即第几步到哪个位置。数组direction记住在棋盘的
某个位置已经试探过的方向,每个位置有八个方向,可按某种顺序对八个方向编号,然后在每个位置按编号顺序试探方向。
在确定数据结构之后,同样需要确定下面几个问题:
1.怎样的状态是初始状态。
2.怎样选择当前步可能的路线
3.怎样表示向前推进一步
4.怎样回溯及清除当前步的痕迹
显然初始状态是棋盘的每个位置都置为第0步到达(即还没有到达),每个位置都还没有选择任何方向(可赋值MAX_DIR(=8)表示没有选择方向)。


选择当前步可能的路线就是在当前位置选择一个方向来游历下一步。在选择的时候同样需要区分是从第0个方向开始考虑还是从上一次的下一个方向开始考虑。为了
方便从下一个方向开始考虑,实际上数组direction在某一位置(curr_x,
curr_y)的值记住的是从上一位置选择了哪个编号的方向而到达的,这样容易回溯到上一位置,而且容易在回溯到上一位置之后从下个一方向重新试探。

向前推进一步则要根据所选择的方向推进到下一位置,记住到下一位置所选择的方向,下一位置是第几步到达的,然后增加步数。
回溯一步则要标记当前位置没有到达过(将到达的步数置为0),根据上一步到当前位置的所选择的方向(这个方向是记录当前位置所对应的direction数组中)而回溯到上一位置,然后减少步数。

相关文章推荐

骑士游历问题

  • 2014年05月02日 00:11
  • 133KB
  • 下载

JAVA课程设计之骑士游历问题

  • 2010年03月15日 17:17
  • 63KB
  • 下载

POJ2488 A Knight's Journey(深搜DFS,字典序,骑士游历问题)

题目: A Knight's Journey Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4298...

骑士游历问题-回溯法

  • 2009年12月02日 10:41
  • 55KB
  • 下载

poj 1915 骑士游历问题

/* 单纯bfs求最短路径,骑士游历系列题目之一 输入: 3 -> 测试例数目 8 -> 棋...
  • baisung
  • baisung
  • 2012年05月14日 23:28
  • 408

回溯法处理骑士游历问题

  • 2009年09月02日 17:08
  • 1KB
  • 下载

C语言骑士游历问题

  • 2012年06月14日 12:31
  • 411KB
  • 下载

Knight's Tour骑士游历问题(C语言实现)

#include int chessboard[8][8]; bool FindPath(int startI,int startJ) { //走法的序号 int queueNumber; ...

骑士游历问题

  • 2014年04月02日 10:39
  • 341KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:骑士游历问题
举报原因:
原因补充:

(最多只允许输入30个字)