# Nearest Exit from Entrance in Maze
這題我有先試著自己寫一次,但是差一點,給gpt debug 才搞出來的,
他的做法是用queue,先放入起點,然後移動有上下左右,如果不是碰到橋的邊緣(達成條件),就會繼續放入queue,如果達成條件返還step,因為一定是最小的
```
class Solution {
public:
int nearestExit(vector<vector<char>>& maze, vector<int>& entrance) {
int row = maze.size();
int col = maze[0].size();
int entR = entrance[0], entC = entrance[1];
// 方向:下、上、右、左
vector<pair<int,int>> dirs = {{1,0}, {-1,0}, {0,1}, {0,-1}};
queue<pair<int,int>> q;
q.push({entR, entC});
maze[entR][entC] = '+'; // 標記起點已訪
int steps = 0;
while (!q.empty()) {
int sz = q.size();
// 一層一層跑
while (sz--) {
auto [r, c] = q.front();
q.pop();
// 到達出口(排除起點)
if (!(r == entR && c == entC) &&
(r==0 || r==row-1 || c==0 || c==col-1)) {
return steps;
}
// 四個方向
for (auto [dr, dc] : dirs) {
int nr = r + dr, nc = c + dc;
// 邊界 & 只走未訪且是空地
if (nr < 0 || nr >= row || nc < 0 || nc >= col)
continue;
if (maze[nr][nc] != '.')
continue;
maze[nr][nc] = '+'; // 標記已訪
q.push({nr, nc});
}
}
steps++; // 換下一層
}
return -1; // 無法到任何出口
}
};
```