#include<iostream>
#include<vector>
using namespace std;
class Coor
{
public:
int x,y;
Coor(int xt=0,int yt=0):x(xt),y(yt){}
Coor operator+(const Coor&a)
{
return Coor(x+a.x,y+a.y);
}
};
Coor Move[8]={Coor(2,1),Coor(2,-1),Coor(-2,1),Coor(-2,-1),Coor(1,2),Coor(1,-2),Coor(-1,2),Coor(-1,-2)};
int numDir(bool isLegal[8][8],Coor getCoor)
{
int num=0;Coor tempCoor;
for(int dirT=1;dirT<=8;++dirT)
{
tempCoor=getCoor+Move[dirT-1];
if(!isLegal[tempCoor.x][tempCoor.y]&&tempCoor.x>=0&&
tempCoor.x<8&&tempCoor.y>=0&&tempCoor.y<8)
num++;
}
return num;
}
void main()
{
for(int i=0;i<8;i++)
for(int j=0;j<8;j++)
{ cout<<"起点是"<<'('<<i<<","<<j<<')'<<"的点旅行结果:";
bool isLegal[8][8];
for(int m=0;m<8;++m)
for(int n=0;n<8;++n)
isLegal[m][n]=0;
vector<Coor>storCoor;
Coor nowCoor(i,j);
isLegal[i][j]=1;
Coor tempCoor,dirCoor;
while(storCoor.size()<64)
{ int d=8,isChan=0,dirT=1;
for(;dirT<=8;dirT++)
{
tempCoor=nowCoor+Move[dirT-1];
if(!isLegal[tempCoor.x][tempCoor.y]&&tempCoor.x>=0&&
tempCoor.x<8&&tempCoor.y>=0&&tempCoor.y<8&&d>numDir(isLegal,tempCoor))
{
dirCoor=tempCoor;
d=numDir(isLegal,tempCoor);
isChan=1;
}
}
if(isChan)
{
storCoor.push_back(dirCoor);
isLegal[dirCoor.x][dirCoor.y]=1;
nowCoor=dirCoor;
}
else break;
}
for(int k=0;k<storCoor.size();++k)
cout<<(k%8?"":"\n")<<'('<<storCoor[k].x<<','<<storCoor[k].y<<')'<<" ";
cout<<endl;
if(storCoor.size()==63){cout<<"骑士旅行成功了!!!"<<endl;}
}
}