HorseTraversal

来源:互联网 发布:魔力宝贝满档宠物数据 编辑:程序博客网 时间:2024/09/21 06:42
//非递归(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<=7int 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;}

原创粉丝点击