#include <iostream>
#include<queue>
#include<stdio.h>
using namespace std;
struct point
{
int x,y;
int c;
} from,to;
char src[3],dist[3];
//8个方向的坐标增量
int dx[]= {1,1,2,2,-1,-1,-2,-2};
int dy[]= {2,-2,1,-1,2,-2,1,-1};
queue<point>q;
int main()
{
while(scanf("%s%s",src,dist)!=EOF)
{
printf("To get from %s to %s ",src,dist);
while(!q.empty())
q.pop();
//起始点
from.x = src[0] - 'a';
from.y = src[1] - '1';
from.c = 0;
//目标点
to.x = dist[0] - 'a';
to.y = dist[1] - '1';
//第一个节点进入队列
q.push(from);
point temp;
while(true)
{
from = q.front();
q.pop();
if(from.x==to.x&&from.y==to.y)
break;
for(int i=0; i<8; i++)
{
temp.x = from.x + dx[i];
temp.y = from.y + dy[i];
temp.c = from.c+1;//此处的from.c再循环的时候其值是不变的
if(temp.x<0||temp.y<0||temp.x>=8||temp.y>=8)
continue;
q.push(temp);
}
}
cout <<"takes "<<from.c<<" knight moves."<< endl;
}
return 0;
}
zoj1091经典的广搜题目
最新推荐文章于 2024-03-28 13:20:57 发布