/*起点与终点一样的时候,单独拿出来 AC*/
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <queue>
using namespace std;
typedef struct node {
int x, y, step;
} node;
const int d1[8] = { 2, 1, -1, -2, -2, -1, 1, 2 };
const int d2[8] = { 1, 2, 2, 1, -1, -2, -2, -1 };
bool vis[10][10];
int sx, sy, ex, ey;
int bfs() {
queue<node> q;
memset(vis, 0, sizeof (vis));
node h;
h.x = sx;
h.y = sy;
h.step = 0;
q.push(h);
vis[h.x][h.y] = true;
while (!q.empty()) {
h = q.front();
q.pop();
node n;
for (int i = 0; i < 8; i++) {
n.x = h.x + d1[i];
n.y = h.y + d2[i];
n.step = h.step + 1;
//if(n.x == ex && n.y == ey)
//return n.step;
if (n.x > 0 && n.x < 9 && n.y > 0 && n.y < 9 && !vis[n.x][n.y]) {
if (n.x == ex && n.y == ey)
return n.step;
q.push(n);
vis[n.x][n.y] = true;
}
}
}
}
int main() {
char s1[5], s2[5];
while (scanf("%s %s", s1, s2) == 2) {
//printf("%s %s\n", s1, s2);
if (strcmp(s1, s2) == 0) {
printf("To get from %s to %s takes 0 knight moves.\n", s1, s2);
continue;
}
sx = s1[0] - 'a' + 1;
sy = s1[1] - '0';
ex = s2[0] - 'a' + 1;
ey = s2[1] - '0';
int ans = bfs();
printf("To get from %s to %s takes %d knight moves.\n", s1, s2, ans);
}
return 0;
}
hdu 1372 Knight Moves
最新推荐文章于 2014-07-18 16:52:30 发布