解法一、BFS
✅ 完整代碼
評分結果(參考) : AC (25ms, 7.2MB)
#include<bits/stdc++.h>
using namespace std;
int l, n, m;
int bfs(vector<vector<string>>& maze){
int pathLen = 0;
queue<tuple<int, int, int>> q;
q.push({1, 1, 1});
maze[1][1][1] = '-';
while(!q.empty()){
int size = q.size();
while(size-- > 0){
int i = get<0>(q.front());
int j = get<1>(q.front());
int k = get<2>(q.front());
q.pop();
if(i==l-2 && j==n-2 && k==m-2){
return pathLen;
}
if(maze[i-1][j][k]==' '){ q.push({i-1, j, k}); maze[i-1][j][k] = '-'; }
if(maze[i+1][j][k]==' '){ q.push({i+1, j, k}); maze[i+1][j][k] = '-'; }
if(maze[i][j-1][k]==' '){ q.push({i, j-1, k}); maze[i][j-1][k] = '-'; }
if(maze[i][j+1][k]==' '){ q.push({i, j+1, k}); maze[i][j+1][k] = '-'; }
if(maze[i][j][k-1]==' '){ q.push({i, j, k-1}); maze[i][j][k-1] = '-'; }
if(maze[i][j][k+1]==' '){ q.push({i, j, k+1}); maze[i][j][k+1] = '-'; }
}
pathLen++;
}
return -1;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> l >> n >> m;
cin.ignore(1, '\n');
vector<vector<string>> maze(l, vector<string>(n));
for(auto& a : maze){
for(string& s : a){
getline(cin, s);
}
cin.ignore(1, '\n');
}
cout << bfs(maze);
return 0;
}