q063. 喵-三維迷宮 5/16/2025

解法一、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;
}