// UVa 439 - Knight Moves #include <iostream> #include <string> #include <queue> #include <string.h> #include <stdio.h> using namespace std; struct pos { int x, y; }; int move[8][2] = { { 1, 2 }, { 1, -2 }, { -1, 2 }, { -1, -2 }, { 2, -1 }, { 2, 1 }, { -2, -1 }, { -2, 1 }, }; int main() { string l; while (getline(cin, l)) { pos ini = { l[0] - 'a', l[1] - '1' }; pos fin = { l[3] - 'a', l[4] - '1' }; int T[8][8]; memset(T, 255, sizeof(T)); int oo = T[0][0]; // bfs queue<pos> q; q.push(ini); T[ini.x][ini.y] = 0; while (!q.empty() && T[fin.x][fin.y] == oo) { pos now = q.front(); q.pop(); for (int k = 0; k < 8; k++) { pos next = { now.x + move[k][0], now.y + move[k][1] }; if (next.x >= 0 && next.x < 8 && next.y >= 0 && next.y < 8 && T[next.x][next.y] == oo) { q.push(next); T[next.x][next.y] = T[now.x][now.y] + 1; } } } printf("To get from %c%c to %c%c takes %d knight moves.\n", l[0], l[1], l[3], l[4], T[fin.x][fin.y]); } return 0; }
Sunday, June 7, 2015
UVa 439 - Knight Moves
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment