#include <iostream>
using namespace std;
struct Node{
int x;
int y;
int step;
}que[100];
int book[8][8];
string beginstr;
string endstr;
int endx;
int endy;
int direct[8][2]={{2,1},{2,-1},{-1,2},{-1,-2},{1,2},{1,-2},{-2,-1},{-2,1}};
int main(){
while(cin>>beginstr>>endstr){
int x=8-(beginstr[1]-'0');
int y=beginstr[0]-'a';
endx=8-(endstr[1]-'0');
endy=endstr[0]-'a';
int flag=0;
int head=0;
int tail=0;
que[tail].x=x;
que[tail].y=y;
que[tail].step=0;
tail++;
book[x][y]=1;
//别忘了确保队列不为空
while(head<tail){
for(int i=0;i<8;i++){
int dx=que[head].x+direct[i][0];
int dy=que[head].y+direct[i][1];
if(dx>=8||dx<0||dy>=8||dy<0)
continue;
if(dx==endx&&dy==endy){
flag=1;
break;
}
if(book[dx][dy]==0){
book[dx][dy]=1;//BFS必须要标记已走过的点
que[tail].x=dx;
que[tail].y=dy;
que[tail].step=que[head].step+1;
tail++;
}
}
if(flag)
break;
head++;//别忘了head++才能对下一个点进行拓展
}
cout<<que[tail-1].step<<endl;
}
return 0;
}
比DFS速度快,找到最短路径即返回