main.cc 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #include <algorithm>
  2. #include <cstdio>
  3. #include <queue>
  4. #include <string>
  5. #include <vector>
  6. using namespace std;
  7. const int N = 5;
  8. const int dx[4] = {1, 0, -1, 0};
  9. const int dy[4] = {0, 1, 0, -1};
  10. char pos[7];
  11. struct Grid {
  12. bool way;
  13. int row;
  14. int col;
  15. Grid *pre;
  16. };
  17. Grid maze[N][N];
  18. int main() {
  19. for (int i = 0, k; i < N; i++) {
  20. for (int j = 0; j < N; j++) {
  21. scanf("%d", &k);
  22. maze[i][j].way = k == 0;
  23. maze[i][j].row = i;
  24. maze[i][j].col = j;
  25. maze[i][j].pre = NULL;
  26. }
  27. }
  28. queue<Grid> q;
  29. q.push(maze[0][0]);
  30. while (q.size() != 0) {
  31. Grid &g = q.front();
  32. q.pop();
  33. if (g.col == N - 1 && g.row == N - 1) break;
  34. for (int i = 0, nx, ny; i < 4; i++) {
  35. nx = g.row + dx[i];
  36. ny = g.col + dy[i];
  37. if (nx < 0 || N <= nx || ny < 0 || N <= ny) continue;
  38. Grid &ng = maze[nx][ny];
  39. if (!ng.way || ng.pre != NULL) continue;
  40. ng.pre = &g;
  41. q.push(ng);
  42. }
  43. }
  44. Grid *cur = &maze[N - 1][N - 1];
  45. vector<string> path;
  46. while (cur != NULL) {
  47. sprintf(pos, "(%d, %d)", cur->row, cur->col);
  48. path.push_back(pos);
  49. cur = cur->pre;
  50. }
  51. for (vector<string>::reverse_iterator cur = path.rbegin(); cur != path.rend(); ++cur)
  52. printf("%s\n", cur->c_str());
  53. return 0;
  54. }