题目地址:​​点击打开链接​

思路:简单BFS,可以走8个方向

AC代码:

#include<iostream>
#include<queue>
#include<cstdio>
using namespace std;
struct point
{
int x,y;
int c;
}from,to;
int dx[8]={-1,-2,-2,-1,1,2,2,1};
int dy[8]={-2,-1,1,2,-2,-1,1,2};
void bfs(char a[],char b[])
{
point temp;
int i;
queue<point> q;
from.x=a[0]-'a';
from.y=a[1]-'1';
from.c=0;
to.x=b[0]-'a';
to.y=b[1]-'1';
q.push(from);
while(true)
{
from=q.front();
q.pop();
if(from.x==to.x&&from.y==to.y)
break;
for(i=0;i<8;i++)
{
temp.x=from.x+dx[i];
temp.y=from.y+dy[i];
temp.c=from.c+1;
if(temp.x<0||temp.x>7||temp.y<0||temp.y>7)
continue;
q.push(temp);
}
}
}
int main()
{
char a[3],b[3];
while(scanf("%s%s",a,b)!=EOF)
{
bfs(a,b);
printf("To get from %s to %s takes %d knight moves.\n",a,b,from.c);
}
return 0;
}