BFS模板题。
#include <bits/stdc++.h> using namespace std; struct Node { int x, y, z; }; const int maxn = 100+1; char ch[maxn][maxn][maxn]; int dis[maxn][maxn][maxn]; queue<Node> q; //进行上下左右前后的移动 int mv[6][3] { {0,0,1}, {0,0,-1}, {1,0,0}, {-1,0,0}, {0,1,0}, {0,-1,0} }; int main() { int n; memset(dis, -1, sizeof(dis)); cin>>n; for (int i=1;i<=n;i++) { for (int j=1;j<=n;j++) { for (int k=1;k<=n;k++) { cin>>ch[i][j][k]; } } } q.push({1,1,1}); dis[1][1][1] = 1; int ans = INT_MAX; int next_x, next_y, next_z; while (q.size()) { Node p = q.front(); q.pop(); for (int i=0;i<6;i++) { next_x = p.x+mv[i][0]; next_y = p.y+mv[i][1]; next_z = p.z+mv[i][2]; if (next_x<=0||next_x>n||next_y<=0||next_y>n||next_z<=0||next_z>n||dis[next_x][next_y][next_z]!=-1) continue; if (ch[next_x][next_y][next_z]=='.') { dis[next_x][next_y][next_z] = dis[p.x][p.y][p.z]+1; q.push({next_x, next_y, next_z}); } } } cout<<dis[n][n][n]; return 0; }