HDU 1253(BFS)

Dear 丶 2022-09-20 12:35 267阅读 0赞

题意:如题。

  1. #include <iostream>
  2. #include <string>
  3. #include <cstring>
  4. #include <queue>
  5. #include <cstdio>
  6. using namespace std;
  7. int A, B, C, T;
  8. int step[6][3] = { {1, 0, 0}, {-1, 0, 0}, {0, 1, 0}, {0, -1, 0}, {0, 0, 1}, {0, 0, -1} };
  9. int castle[52][52][52];
  10. struct Point
  11. {
  12. int x, y, z, t;
  13. Point() : t(0) {}
  14. Point(int _x, int _y, int _z, int _t) : x(_x), y(_y), z(_z), t(_t) {}
  15. Point operator +(const int s[]) const
  16. {
  17. return Point(x + s[0], y + s[1], z + s[2], t + 1);
  18. }
  19. bool legal()
  20. {
  21. return (castle[x][y][z] == 0) && t <= T;
  22. }
  23. bool end()
  24. {
  25. return x == A && y == B && z == C && t <= T;
  26. }
  27. void set()
  28. {
  29. castle[x][y][z] = 1;
  30. }
  31. };
  32. int BFS()
  33. {
  34. Point p, t;
  35. queue<Point> q;
  36. q.push(Point(1, 1, 1, 0));
  37. while (!q.empty())
  38. {
  39. p = q.front();
  40. q.pop();
  41. for (int i = 0; i < 6; ++i)
  42. {
  43. t = p + step[i];
  44. if (!t.legal())
  45. {
  46. //cout << castle[t.x][t.y][t.z] <<endl;
  47. continue;
  48. }
  49. //cout << castle[t.x][t.y][t.z] <<endl;
  50. if (t.end())
  51. return t.t;
  52. t.set();
  53. //cout << t.x << " " << t.y << " " << t.z << endl;
  54. q.push(t);
  55. }
  56. }
  57. return -1;
  58. }
  59. int main()
  60. {
  61. int K, i, j, k;
  62. scanf("%d", &K);
  63. for (i = 1; i < 52; ++i)
  64. for (j = 1; j < 52; ++j)
  65. castle[0][i][j] = castle[i][j][0] = castle[i][0][j] = 1;
  66. while (K--)
  67. {
  68. scanf("%d%d%d%d", &A, &B, &C, &T);
  69. for (i = 1; i <= A; ++i)
  70. for (j = 1; j <= B; ++j)
  71. for (k = 1; k <= C; ++k)
  72. scanf("%d", &castle[i][j][k]);
  73. if (A + B + C - 3 > T)
  74. {
  75. puts("-1");
  76. continue;
  77. }
  78. for (i = 1; i < 52; ++i)
  79. for (j = 1; j < 52; ++j)
  80. castle[A+1][i][j] = castle[i][j][C+1] = castle[i][B+1][j] = 1;
  81. /*
  82. for (i = 1; i <= B; ++i)
  83. for (j = 1; j <= C; ++j)
  84. castle[A+1][i][j] = 1;
  85. for (i = 1; i <= A; ++i)
  86. for (j = 1; j <= B; ++j)
  87. castle[i][j][C+1] = 1;
  88. for (i = 1; i <= A; ++i)
  89. for (j = 1; j <= C; ++j)
  90. castle[i][B+1][j] = 1;
  91. */
  92. printf("%d\n", BFS());
  93. }
  94. }

发表评论

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

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

相关阅读

    相关 HDU杭电 1253 胜利大逃亡(图 BFS

    本题难度并不大,一个普通的用BFS求解的题,值得注意的是数据的输入(三维数据输入被绕了几圈);还有就是最后的出口可以表示墙,无法出去(就是没考虑到这点WA了一次);剩下的就是B

    相关 HDU 1240(bfs)

    题意:给出一个三维空间,宇宙飞船的起始地点,目标地点,求最短飞行距离。   include <iostream> include <str

    相关 HDU 1728(BFS)

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