正经题解|地下城主
2024-03-22 11:18:22
发布于:浙江
18阅读
0回复
0点赞
【算法分析】
三维矩阵的广搜。注意输入和方向数组,地图的第一维是层数。
【参考代码】
#include <bits/stdc++.h>
using namespace std;
char MAP[109][109][109];
bool vis[109][109][109];
struct node {
int z, x, y, step;
}l,r;
int dir[6][3] = { {-1,0,0},{0,1,0},{1,0,0},{0,-1,0},{0,0,1},{0,0,-1} };
int main() {
int h, n, m;
cin >> h >> n >> m;
int sx, sy, sz, ex, ey, ez;
for (int i = 1; i <= h; i++) {
for (int j = 1; j <= n; j++) {
cin >> MAP[i][j] + 1;
for (int z = 1; z <= m; z++) {
if (MAP[i][j][z] == 'S') {
sz = i, sx = j, sy = z;
}
else if (MAP[i][j][z] == 'E') {
ez = i, ex = j, ey = z;
}
}
}
}
queue<node> q;
q.push({ sz,sx,sy,0 });
vis[sx][sy][sz] = 1;
while (q.size()) {
r = q.front();
q.pop();
if (r.z == ez && r.x == ex && r.y == ey) {
cout << "Escaped in " << r.step << " minute(s)." << '\n';
return 0;
}
for (int i = 0; i < 6; i++) {
l.z = r.z + dir[i][0];
l.x = r.x + dir[i][1];
l.y = r.y + dir[i][2];
l.step = r.step + 1;
if (l.x >= 1 && l.x <= n && l.y >= 1 && l.y <= m && l.z >= 1 && l.z <= h && !vis[l.z][l.x][l.y] && MAP[l.z][l.x][l.y] != '#') {
vis[l.z][l.x][l.y] = 1;
q.push(l);
}
}
}
cout << "Trapped!";
return 0;
}
【时间复杂度】
【预计得分】
这里空空如也
有帮助,赞一个