#include<stdio.h>
#include<string.h>
#define max 15
bool visit[max][max];
int next[8][2]={1,2,1,-2,-1,2,-1,-2,2,1,2,-1,-2,1,-2,-1},a,b,c,d;
struct point
{
int x,y;
int step;
}queue[max*max];
int bfs()
{
int head=0,tail=1,i,xi,yi;
if(a==c && b==d)
return 0;
queue[head].x=a;
queue[head].y=b;
queue[head].step=0;
visit[a][b]=0;
while(head<tail)
{
for(i=0;i<8;i++)
{
xi=queue[head].x+next[i][0];
yi=queue[head].y+next[i][1];
if(xi<8 && xi>=0 && yi<8 && yi>=0 &&visit[xi][yi])
{
if(xi==c && yi==d)
return queue[head].step+1;
else
{
queue[tail].x=xi;
queue[tail].y=yi;
queue[tail++].step=queue[head].step+1;
visit[xi][yi]=0;
}
}
}
head++;
}
return 0;
}
int main()
{
char x[2],y[2];
while(scanf("%s %s",x,y)!=EOF)
{
memset(visit,true,sizeof(visit));
a=x[0]-'a';
b=x[1]-'1';
c=y[0]-'a';
d=y[1]-'1';
printf("To get from %s to %s takes %d knight moves.\n",x,y,bfs());
}
return 0;
}
hdu1372 Knight Moves 蛋疼 忘记标记了 RE了很久
最新推荐文章于 2022-02-25 19:38:17 发布