#include<iostream>
#include<queue>
#include<stdio.h>
using namespace std;
struct node
{
int x;
int y;
int step;
};
int a[]={-2,-1,1,2,2,1,-1,-2};
int b[]={1,2,2,1,-1,-2,-2,-1};
int countStep(node start,node end)
{
node tmp;
node frt;
if(start.x==end.x&&start.y==end.y)
return 0;
queue<node> q;
q.push(start);
while(!q.empty())
{
frt=q.front();
q.pop();
for(int i=0;i<8;i++)
{
tmp.x=a[i]+frt.x;
tmp.y=b[i]+frt.y;
tmp.step=frt.step+1;
if(tmp.x==end.x&&tmp.y==end.y)
return tmp.step;
if(tmp.x>=1&&tmp.x<=8&&tmp.y>=1&&tmp.y<=8)
q.push(tmp);
}
}
}
int main()
{
int a,b;
char c1,c2;
node start,end;
while(scanf("%c%d %c%d",&c1,&a,&c2,&b)!=EOF)
{
start.step=0;
start.x=c1-'a'+1;
start.y=a;
end.x=c2-'a'+1;
end.y=b;
printf("To get from %c%d to %c%d takes %d knight moves.\n",c1,a,c2,b,countStep(start,end));
getchar();
}
return 0;
}
搜索简单题——Knight Moves
最新推荐文章于 2025-03-30 16:45:00 发布