/*改进版,不用vis数组,d数组为0表示没有访问过,非0的值表示到达所需的步数 AC*/
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
typedef pair<int,int> P;
const int x[8] = {1, 1, 2, 2, -1, -1, -2, -2};
const int y[8] = {2, -2, 1, -1, 2, -2, 1, -1};
int d[10][10];
int sx, sy, ex, ey;
int bfs() {
memset(d, 0, sizeof (d));
queue<P> q;
q.push(P(sx, sy));
while (!q.empty()) {
P p = q.front();
q.pop();
if (p.first == ex && p.second == ey)
break;
for (int i = 0; i < 8; i++) {
int nx = p.first + x[i];
int ny = p.second + y[i];
if (nx >= 0 && ny >= 0 && nx < 8 && ny < 8 && !d[nx][ny]) {
q.push(P(nx,ny));
d[nx][ny] = d[p.first][p.second] + 1;
}
}
}
return d[ex][ey];
}
int main() {
char s[5], e[5];
while (scanf("%s %s", s, e) != EOF) {
sx = s[0] - 'a';
sy = s[1] - '1';
ex = e[0] - 'a';
ey = e[1] - '1';
int k = bfs();
printf("To get from %s to %s takes %d knight moves.\n", s, e, k);
}
return 0;
}
hdu 1372 解法二
最新推荐文章于 2019-06-05 21:17:31 发布