#include<bits/stdc++.h>
using namespace std;
int d[8][2]={-1,-2,-2,-1,1,-2,2,-1,-2,1,-1,2,1,2,2,1};
struct node{
char x;
int y,t;
}a,b;
int vis[200][10];
int vj(char x,int y){
if(x>='a'&&x<='h'&&y>=1&&y<=8&&vis[x][y]==0) return 1;
return 0;
}
int main (){
char x,x1;int y,y1;
while(~scanf("%c",&x1)){
scanf("%d",&y1);
a.x = x1;a.y = y1;a.t= 0;
getchar();
scanf("%c%d",&x,&y);
getchar();
memset(vis,0,sizeof vis);
queue<node>k;
k.push(a);vis[a.x][a.y] = 1;
while(!k.empty()){
a = k.front();k.pop();
if(a.x==x&&a.y==y){
printf("To get from %c%d to %c%d takes %d knight moves.\n",x1,y1,x,y,a.t);
break;
}
for(int i = 0;i<8;i++){
char xx = a.x+d[i][0];
int yy = a.y+d[i][1];
if(vj(xx,yy)){
b.x = xx;b.y = yy;b.t= a.t+1;
vis[b.x][b.y] = 1;
k.push(b);
}
}
}
}
return 0;
}
备注:骑士(即马)走日字,共有8种情况,引入二维数组d[8][2]来记录
//d[8][2] = {-1,-2,-2,-1,1,-2,2,-1,-2,1,-1,2,1,2,2,1};添加链接描述