马走日。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int x2,y2;
int ans;
int q[100000];
int dis[100000];
int vis[10][10];
int dx[]={-1,-2,-2,-1,1,2,2,1};
int dy[]={2,1,-1,-2,-2,-1,1,2};
void bfs(int x1,int y1)
{
int rear=1,front=1;
vis[y1][x1]=1;
q[rear++]=y1*8+x1;
while(front<rear)
{
for(int i=0;i<8;i++)
{
int nx=q[front]%8+dx[i];
int ny=q[front]/8+dy[i];
if(!vis[ny][nx]&&nx>=0&&nx<8&&ny>=0&&ny<8)
{
dis[rear]=dis[front]+1;
if(nx==x2&&ny==y2)
{
ans=dis[rear];
return;
}
vis[ny][nx]=1;
q[rear++]=ny*8+nx;
}
}
front++;
}
}
int main()
{
char a,b,c,d;
int x1,y1;
while(scanf("%c%c %c%c",&a,&b,&c,&d)!=EOF)
{
getchar();
memset(dis,0,sizeof(dis));
memset(vis,0,sizeof(vis));
x1=a-'a';y1=b-'1';
x2=c-'a';y2=d-'1';
if(x1==x2&&y1==y2) {printf("To get from %c%c to %c%c takes 0 knight moves.\n",a,b,c,d);continue;}
bfs(x1,y1);
printf("To get from %c%c to %c%c takes %d knight moves.\n",a,b,c,d,ans);
}
return 0;
}