牛客 走出迷宫
题目:
链接https://ac.nowcoder.com/acm/problem/14572
思路:
由题可知,是一个单源最短路,使用bfs搜索,从S点出发找到E点即可,用一个标志位判断是否找到。
代码:
#include <bits/stdc++.h>
using namespace std;
const int maxn=505;
int n,m;
char a[maxn][maxn];
int ax[]= {0,0,1,-1},ay[]= {1,-1,0,0};
queue<pair<int,int>> q;
int main() {
while(cin >> n >> m) {
for(int i=0; i<n; i++)
for(int j=0; j<m; j++) {
cin >> a[i][j];
if(a[i][j]=='S') { //找出发点
q.push({i,j});
}
}
bool bo=false;//标志位
while(!q.empty()) {//bfs
int x =q.front().first;
int y = q.front().second;
q.pop();
for(int i=0; i<4; i++) {//可以走上下左右
int x2=x+ax[i];
int y2=y+ay[i];
if(x2<0||x2>=n||y2<0||y2>=m||a[x2][y2]=='#')continue;//数组边界与障碍物和已经走过的路
if(a[x2][y2]=='E') {//找到终点,把标志位设为ture并退出bfs
bo =true ;
break;
}
q.push({x2,y2});
a[x2][y2]='#';
}
if(bo) break;//标志位为ture退出bfs
}
if(bo) cout <<"Yes" <<endl;//标志位判断是否找到终点
else cout << "No"<<endl;
}
return 0;
}