#include <iostream>
#include <queue>
using namespace std;
struct C
{
int x, y;
}o;
int f[9][9]={0}, mv[8][2] = {1,-2,1,2,2,1,2,-1,-1,2,-1,-2,-2,1,-2,-1};
queue <C> Q;
int a, b, c, d;
void bfs()
{
int i, j, x, y;
while (!Q.empty())
{
o = Q.front(), Q.pop();
x = o.x, y = o.y;
for (int k=0;k<8;++k)
{
i = x + mv[k][0];
j = y + mv[k][1];
if (0<i && i<9 && 0<j && j<9 && !f[i][j])
{
f[i][j] = f[x][y] + 1;
if (i==a && j==b) break;
C v = {i, j};
Q.push(v);
}
}
}
}
int main()
{
while (~scanf("%c%d %c%d",&a, &b, &c, &d))
{
printf("To get from %c%d to %c%d takes ", a, b, c, d);
memset(f, 0 ,sizeof(f));
while (!Q.empty()) Q.pop();
a -= 96, f[a][b] = 1;
C v = {a, b};
Q.push(v);
if (!f[c-=96][d]) bfs();
printf("%d knight moves.\n", f[c][d]-1);
getchar();
}
return 0;
}
hdu 1372
最新推荐文章于 2024-04-15 15:59:15 发布