#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<queue>
using namespace std;
const int inf=1<<30;
int n,a,b,k[210],dx[8]={-1,-1,1,1,2,-2,2,-2},dy[8]={2,-2,2,-2,-1,-1,1,1},vis[10][10],ans[10][10],sx,sy,ex,ey,flag;
void bfs()
{
int x,y;
queue<int> q;
q.push(sx*8+sy);
ans[sx][sy]=0;
vis[sx][sy]=1;
flag=0;
while(!q.empty())
{
int k=q.front();
q.pop();
x=k/8;
y=k%8;
for(int i=0;i<8;i++)
{
if(flag)
break;
int nx=x+dx[i],ny=y+dy[i];
if(nx<8&&nx>=0&&ny<8&&ny>=0&&!vis[nx][ny])
{
vis[nx][ny]=1;
ans[nx][ny]=ans[x][y]+1;
if(nx==ex&&ny==ey)
flag=1;
else
q.push(nx*8+ny);
}
}
}
}
int main()
{
char s[10];
while(gets(s))
{
sx=s[0]-'a';
sy=s[1]-'1';
ex=s[3]-'a';
ey=s[4]-'1';
memset(vis,0,sizeof(vis));
bfs();
printf("To get from %c%c to %c%c takes %d knight moves.\n",s[0],s[1],s[3],s[4],ans[ex][ey]);
}
return 0;
}
HDU 1372 Knight Moves
最新推荐文章于 2021-07-23 16:46:28 发布