HDU 1242(bfs)

偏执的太偏执、 2022-09-20 11:29 256阅读 0赞

题意:一个朋友拯救angel,’a’ 是angel, ‘x’是士兵, ‘r’是朋友,’#‘是墙壁。没走一步花费一个单位的时间,遇到士兵与士兵搏斗花费一个单位的时间,求最短时间。

  1. #include <iostream>
  2. #include <queue>
  3. #include <string>
  4. #include <sstream>
  5. using namespace std;
  6. struct Point
  7. {
  8. int x, y, time;
  9. bool operator <(const Point& rhs) const
  10. {
  11. return time > rhs.time;
  12. }
  13. } a;
  14. int direction[4][2] = { {1, 0}, {-1, 0}, {0, -1}, {0, 1} };
  15. void getXY(string* matrix, int n, int m)
  16. {
  17. for (int i = 1; i <= n; ++i)
  18. for (int j = 1; j <= m; ++j)
  19. if (matrix[i][j] == 'a')
  20. {
  21. a.x = i;
  22. a.y = j;
  23. a.time = 0;
  24. return;
  25. }
  26. }
  27. int result(string* matrix)
  28. {
  29. Point t;
  30. priority_queue<Point> q;
  31. Point p;
  32. q.push(a);
  33. while (!q.empty())
  34. {
  35. p = q.top();
  36. q.pop();
  37. for (int i = 0; i < 4; ++i)
  38. {
  39. t.x = p.x + direction[i][0];
  40. t.y = p.y + direction[i][1];
  41. if (matrix[t.x][t.y] == '#')
  42. continue;
  43. t.time = p.time + 1;
  44. if (matrix[t.x][t.y] == 'r')
  45. return t.time;
  46. if (matrix[t.x][t.y] == 'x')
  47. t.time += 1;
  48. matrix[t.x][t.y] = '#';
  49. q.push(t);
  50. }
  51. }
  52. return -1;
  53. }
  54. int main()
  55. {
  56. int n, m, i;
  57. string line;
  58. string matrix[202];
  59. while (cin >> n >> m)
  60. {
  61. getchar();
  62. for (i = 1; i <= n; ++i)
  63. {
  64. getline(cin, matrix[i]);
  65. matrix[i] = '#' + matrix[i] + '#';
  66. }
  67. matrix[n+1] = matrix[0] = string(m+2, '#');
  68. getXY(matrix, n, m);
  69. i = result(matrix);
  70. if (i == -1)
  71. cout << "Poor ANGEL has to stay in the prison all his life.\n";
  72. else cout << i << endl;
  73. }
  74. }

发表评论

表情:
评论列表 (有 0 条评论,256人围观)

还没有评论,来说两句吧...

相关阅读

    相关 HDU 1242(bfs)

    题意:一个朋友拯救angel,'a' 是angel, 'x'是士兵, 'r'是朋友,'\'是墙壁。没走一步花费一个单位的时间,遇到士兵与士兵搏斗花费一个单位的时间,求最短时间。

    相关 HDU 1728(BFS)

    问题描述: 给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可以穿越,有些