三维BFS,直接搬模板就好
#include <bits/stdc++.h>
using namespace std;
const int N = 110;
int n;
char m[N][N][N];
int dis[N][N][N];
typedef struct Edge
{
int third;
int second;
int first;
}three;
int bfs()
{
queue<three> q;
memset(dis, -1, sizeof dis);
q.push({1, 1, 1});
dis[1][1][1] = 1;
int dx[] = {0, 1, 0, -1 ,0 , 0}, dy[] = {1, 0, -1, 0, 0, 0}, dz[] = {0, 0, 0, 0, 1, -1};
while(q.size())
{
three t = q.front();
q.pop();
for(int i = 0; i < 6; i++)
{
int x = t.third + dx[i], y = t.second + dy[i], z = t.first + dz[i];
if(x >= 1 && y >= 1 && z >= 1 && x <= n && y <= n && z <= n && dis[x][y][z] == -1 && m[x][y][z] != '*')
{
dis[x][y][z] = dis[t.third][t.second][t.first] + 1;
q.push({x, y, z});
}
}
}
return dis[n][n][n];
}
int main()
{
cin >> n;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
for(int k = 1; k <= n; k++)
cin >> m[i][j][k];
auto t = bfs();
if(t == -1)
cout << -1 << endl;
else
cout << t << endl;
return 0;
}
京公网安备 11010502036488号