一、问题描述



二、解题思路
由于本题需要求最短路径的长度,所以可以使用bfs来解决这个问题。解题思路如下:
(1)首先,对全局变量进行初始化;
(2)接着,从入口开始进行深度优先搜索,由于本题需要统计的是最小步数,也就是层数,所以需要变量size来记录每一层的节点数,便于统计。如果找到了出口,直接返回step,如果循环执行完了还未找到出口,那就返回-1。
三、代码实现
cpp
class Solution {
int N,M;
vector<vector<bool>> visited;
int dx[4]={0,1,0,-1};
int dy[4]={-1,0,1,0};
public:
int nearestExit(vector<vector<char>>& maze, vector<int>& entrance) {
//深度优先搜索
//全局变量初始化
N=maze.size();
M=maze[0].size();
visited.resize(N,vector<bool>(M,false));
//BFS
queue<pair<int,int>> q;
q.push({entrance[0],entrance[1]});
visited[entrance[0]][entrance[1]]=true;
int step=0;
while(!q.empty()){
step++;
int size=q.size();//统计本层的元素数量
while(size--){
pair<int,int> cur=q.front();q.pop();
int cur_x=cur.first;
int cur_y=cur.second;
for(int i=0;i!=4;i++){
int next_x=cur_x+dx[i];
int next_y=cur_y+dy[i];
if(next_x>=0&&next_x<N&&next_y>=0&&next_y<M&&maze[next_x][next_y]=='.'&&visited[next_x][next_y]==false){
if(next_x==0||next_x==N-1||next_y==0||next_y==M-1) return step;
q.push({next_x,next_y});
visited[next_x][next_y]=true;
}
}
}
}
return -1;
}
};