Run Time: 0.030
Ranking (as of 2016-04-25): 3 out of 479
Language: C++
/* UVa 10097 - The Color Game To build using Visual Studio 2012: cl -EHsc -O2 UVa_10097_The_Color_Game.cpp */ #include <queue> #include <utility> #include <cstdio> using namespace std; const int N_max = 100; int matrix[N_max + 1][N_max + 1], visited[N_max + 1][N_max + 1]; int main() { for (int g = 1; ; g++) { int N; scanf("%d", &N); if (!N) break; for (int i = 1; i <= N; i++) for (int j= 1; j <= N; j++) { int k; scanf("%d", &k); matrix[i][j] = k; visited[i][j] = -1; } int N1, N2, N3; scanf("%d %d %d", &N1, &N2, &N3); int min_moves = -1; queue< pair<int, int> > q; visited[N1][N2] = 0; q.push(make_pair(N1, N2)); while (!q.empty()) { pair<int, int> p = q.front(); q.pop(); N1 = p.first, N2 = p.second; int m = visited[N1][N2]; #ifdef DEBUG printf("%d %d %d\n", N1, N2, m); #endif if (N1 == N3 || N2 == N3) { min_moves = m; break; } if (N1 != N3) { if (matrix[N1][N2] && visited[matrix[N1][N2]][N2] == -1) { #ifdef DEBUG printf(" %d %d %d\n", matrix[N1][N2], N2, m + 1); #endif visited[matrix[N1][N2]][N2] = m + 1; q.push(make_pair(matrix[N1][N2], N2)); } } if (N2 != N3) { if (matrix[N2][N1] && visited[matrix[N2][N1]][N1] == -1) { #ifdef DEBUG printf(" %d %d %d\n", matrix[N2][N1], N1, m + 1); #endif visited[matrix[N2][N1]][N1] = m + 1; q.push(make_pair(matrix[N2][N1], N1)); } } } printf("Game #%d\n", g); if (min_moves != -1) printf("Minimum Number of Moves = %d\n\n", min_moves); else printf("Destination is Not Reachable !\n\n"); } return 0; }
No comments:
Post a Comment