马的遍历问题
一个棋盘有8行8列,中国象棋中的马从一个位置出发,求能够遍历棋盘的走法
这个程序今天终于运行成功了。其实思想就是普通的回溯,前两天写的程序一直没有运行成功,但错误又找不出来。今天看到题目上的一行字才猛然醒悟,从(0,0)点开始需要回溯300W次。在我这台略显古老的机器上要跑40-50秒。我看程序运行十几秒还没反应以为死循环了呢,用断点跟踪也是在某个数值段上上下来回起伏。改了又改,越改越错。这次又给我一个教训。
言归正传,上思路。
1,提供一个BOOL类型数组,全部全部置为FALSE,表示没有遍历过,选定一个起始位置(X,Y),将该点压入栈底,并将该点对应数组中的位置改为TRUE。并将其实位置点作为当前点。
2,取当前点的INDEX
if index < 7
向index所指向的方向移动,index+1
if 该店标记为 false
保存该点信息和新点信息,将该点置为true,返回2
else
返回2
else
将当位置改为false,并将该点丢弃,去栈顶点位当前点 返回2
3,重复2,一直到栈的元素数量为64,此时全部遍历完成
下边是代码