a982. 迷宮問題#1 8/31/2025

解法一、BFS

✅ 完整代碼

評分結果(參考) : AC (2ms, 360KB)

#include<bits/stdc++.h>
using namespace std;

int n;

int bfs(vector<string>& maze){
    int pathLen = 1;
    queue<pair<int, int>> q;
    q.push({1, 1});
    maze[1][1] = '-';

    while(!q.empty()){
        int size = q.size();
        while(size-- > 0){
            int i = q.front().first;
            int j = q.front().second;
            q.pop();

            if(i==n-2 && j==n-2){
                return pathLen;
            }

            if(maze[i-1][j]=='.'){ q.push({i-1, j}); maze[i-1][j] = '-'; }
            if(maze[i+1][j]=='.'){ q.push({i+1, j}); maze[i+1][j] = '-'; }
            if(maze[i][j-1]=='.'){ q.push({i, j-1}); maze[i][j-1] = '-'; } 
            if(maze[i][j+1]=='.'){ q.push({i, j+1}); maze[i][j+1] = '-'; } 
        }
        pathLen++;
    }
    return -1;
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    while(cin >> n){
        vector<string> maze(n);
        for(string& s : maze) cin >> s;
        
        int ans = bfs(maze);
        if(ans >= 0) cout << ans;
        else cout << "No solution!";
    }

    return 0;
}