#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include <iostream>
#include <queue>
using namespace std;
int dx[8]={-2,-1,1,2, 2, 1,-1,-2};
int dy[8]={ 1, 2,2,1,-1,-2,-2,-1};
bool visit[50][50];
struct node{
int x;
int y;
int num;
}M[2];
queue<node>Q;
bool f(int x,int y)
{
if(x<1||x>'h'-'a'+1||y<1||y>8)
return false;
return true;
}
int bfs(node start,node end)
{
memset(visit,false,sizeof(visit));
while(!Q.empty())
Q.pop();
node head,temp;
Q.push(start);
start.num=0;
while(!Q.empty())
{
head=Q.front();
if(head.x==end.x&&head.y==end.y)
return head.num;
for(int i=0;i<8;i++)
{
temp.x=head.x+dx[i];
temp.y=head.y+dy[i];
if(!visit[temp.x][temp.y]&&f(temp.x,temp.y))
{
temp.num=head.num+1;
Q.push(temp);
}
}
Q.pop();
}
}
int main()
{
//freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
char a,b;
int ans;
while(scanf("%c%d %c%d\n",&a,&M[0].y,&b,&M[1].y)==4)
{
M[0].x=a-'a'+1;
M[1].x=b-'a'+1;
ans=bfs(M[0],M[1]);
printf("To get from %c%d to %c%d takes %d knight moves.\n",a,M[0].y,b,M[1].y,ans);
}
return 0;
}
Knight Moves
最新推荐文章于 2024-02-27 16:27:20 发布