struct my
{
int x, y;
} wo[100];
int main()
{
char s[20];
while (gets(s)) {
int d[10][10] = {0};
int g[10][10] = {0};
int i, j;
for (i = 1; i <= 8; ++i)
for (j = 1; j <= 8; ++j)
d[i][j] = 0x7fffffff;
int a = s[0] - 'a' + 1;
int b = s[1] - '0';
int x = s[3] - 'a' + 1;
int y = s[4] - '0';
queue<my>q;
my t;
t.x = a;
t.y = b;
q.push(t);
d[a][b] = 0;
while (!q.empty()) {
my tx = q.front();
g[tx.x][tx.y] = 1;
if (tx.x == x && tx.y == y) {
printf("To get from %c%c to %c%c takes %d knight moves.\n", s[0], s[1], s[3], s[4], d[x][y]);
break;
}
q.pop();
if (tx.x - 2 >= 1 && tx.y + 1 <= 8) {
my ty;
ty.x = tx.x - 2;
ty.y = tx.y + 1;
if (g[ty.x][ty.y] == 0) {
if (d[ty.x][ty.y] > d[tx.x][tx.y] + 1)
d[ty.x][ty.y] = d[tx.x][tx.y] + 1;
q.push(ty);
}
}
if (tx.x - 2 >= 1 && tx.y - 1 >= 1) {
my ty;
ty.x = tx.x - 2;
ty.y = tx.y - 1;
if (g[ty.x][ty.y] == 0) {
if (d[ty.x][ty.y] > d[tx.x][tx.y] + 1)
d[ty.x][ty.y] = d[tx.x][tx.y] + 1;
q.push(ty);
}
}
if (tx.x + 2 <= 8 && tx.y + 1 <= 8) {
my ty;
ty.x = tx.x + 2;
ty.y = tx.y + 1;
if (g[ty.x][ty.y] == 0) {
if (d[ty.x][ty.y] > d[tx.x][tx.y] + 1)
d[ty.x][ty.y] = d[tx.x][tx.y] + 1;
q.push(ty);
}
}
if (tx.x + 2 <= 8 && tx.y - 1 >= 1) {
my ty;
ty.x = tx.x + 2;
ty.y = tx.y - 1;
if (g[ty.x][ty.y] == 0) {
if (d[ty.x][ty.y] > d[tx.x][tx.y] + 1)
d[ty.x][ty.y] = d[tx.x][tx.y] + 1;
q.push(ty);
}
}/////////////
if (tx.x - 1 >= 1 && tx.y + 2 <= 8) {
my ty;
ty.x = tx.x - 1;
ty.y = tx.y + 2;
if (g[ty.x][ty.y] == 0) {
if (d[ty.x][ty.y] > d[tx.x][tx.y] + 1)
d[ty.x][ty.y] = d[tx.x][tx.y] + 1;
q.push(ty);
}
}
if (tx.x + 1 <= 8 && tx.y + 2 <= 8) {
my ty;
ty.x = tx.x + 1;
ty.y = tx.y + 2;
if (g[ty.x][ty.y] == 0) {
if (d[ty.x][ty.y] > d[tx.x][tx.y] + 1)
d[ty.x][ty.y] = d[tx.x][tx.y] + 1;
q.push(ty);
}
}
if (tx.x - 1 >= 1 && tx.y - 2 >= 1) {
my ty;
ty.x = tx.x - 1;
ty.y = tx.y - 2;
if (g[ty.x][ty.y] == 0) {
if (d[ty.x][ty.y] > d[tx.x][tx.y] + 1)
d[ty.x][ty.y] = d[tx.x][tx.y] + 1;
q.push(ty);
}
}
if (tx.x + 1 <= 8 && tx.y - 2 >= 1) {
my ty;
ty.x = tx.x + 1;
ty.y = tx.y - 2;
if (g[ty.x][ty.y] == 0) {
if (d[ty.x][ty.y] > d[tx.x][tx.y] + 1)
d[ty.x][ty.y] = d[tx.x][tx.y] + 1;
q.push(ty);
}
}
}
}
return 0;
}
POJ-2243(bfs)(Knight Moves )
最新推荐文章于 2021-07-18 00:07:06 发布