普通的BFS
注意一下马移动的八个方向就可以了
#include <iostream>
#include <cstdio>
#include <queue>
#include <cstring>
#include <algorithm>
using namespace std;
struct node{
int x,y,steps;
node(int x,int y,int steps):x(x),y(y),steps(steps) {}
node() {}
};
int map[10][10];
int sx,sy,ex,ey;
char in1[5],in2[5];
int dx[8]={-1,-2,-2,-1,1,2,2,1};
int dy[8]={-2,-1,1,2,2,1,-1,-2};
int bfs(){
memset(map,0,sizeof(map));
queue<node> q;
q.push(node(sx,sy,0));
map[sx][sy]=1;
while(!q.empty()){
node first=q.front();
q.pop();
if(first.x==ex&&first.y==ey) return first.steps;
for(int i=0;i<8;i++){
node next;
next.x=first.x+dx[i],next.y=first.y+dy[i];
if(next.x>=0&&next.x<8&&next.y>=0&&next.y<8&&!map[next.x][next.y]){
next.steps=first.steps+1;
q.push(next);
map[next.x][next.y]=1;
}
}
}
}
int main(){
while(~scanf("%s %s",in1,in2)){
sx=in1[0]-'a',sy=in1[1]-'1';
ex=in2[0]-'a',ey=in2[1]-'1';
printf("To get from %s to %s takes %d knight moves.\n",in1,in2,bfs());
}
}