//非递归(non-recursive) 搜索 找到可行路径
#include <iostream>
using namespace std;
int main()
{
int Board[8][8];//棋盘
int Horse[64][3],top=0;//栈与栈顶指针,记录马走的路径
int i,j,k=0;//(i,j)表示格子,k表示八个方向,0<=k<=7
int HTry[8][2]={{-2,1},{-1,2},{1,2},{2,1},{2,-1},{1,-2},{-1,-2},{-2,-1}};//八个方向
for( i=0;i<8;i++)
for( j=0;j<8;j++)
Board[i][j]=0;//初始化棋盘
cout<<"输入马开始的点(i,j):";//提示用户输入
cin>>i>>j;
cout<<endl;
do //遍历棋盘
{ //不(可以走)&& 有方向可寻
while( !( 0<=i+HTry[k][0] && i+HTry[k][0]<=7 &&
0<=j+HTry[k][1] && j+HTry[k][1]<=7 &&
Board[i+HTry[k][0]][j+HTry[k][1]]==0
)&& k<8
)k++; //则 继续寻找
if(k<8 || top==63) //如果是 (可行点 或 最后一点 )则
{
Horse[top][0]=i;
Horse[top][1]=j;
Horse[top][2]=k;//入栈
Board[i][j] = ++top;// 记录是第几步
i=i+HTry[k][0];
j=j+HTry[k][1];
k=0;//跳到下一步
}
else //否则 此点 已被围死且没走完
{
top--;//出栈
i=Horse[top][0];
j=Horse[top][1];//返回上一步
k=Horse[top][2]+1;//从下一个方向寻找
Board[i][j]=0;//清除脚印
}
}while(top!=64);//没遍历完 则 循环
for(i=0;i<8;i++)//输出棋盘
{
for(j=0;j<8;j++)
{
cout.width(2);
cout<<Board[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
HorseTraversal
最新推荐文章于 2013-11-30 18:22:33 发布