AcWing 1101. 献给阿尔吉侬的花束--------典型BFS
作者:
cyuyu
,
2022-04-07 20:53:59
,
所有人可见
,
阅读 183
代码:
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
const int N=210;
char a[N][N];
int d[N][N];
typedef pair<int,int>pii;
int bfs(int l,int r,int n,int m){
memset(d,-1,sizeof d);
int x[4]={0,0,-1,1};
int y[4]={1,-1,0,0};
queue<pii>res;
res.push({l,r});
d[l][r]=0;
while(!res.empty()){
auto temp=res.front();
res.pop();
for(int i=0;i<4;i++){
int p=temp.first+x[i];
int q=temp.second+y[i];
if(p>=1&&p<=n&&q>=1&&q<=m&&a[p][q]=='E'&&d[p][q]==-1){
return d[temp.first][temp.second]+1;
}
if(p>=1&&p<=n&&q>=1&&q<=m&&a[p][q]=='.'&&d[p][q]==-1){
d[p][q]=d[temp.first][temp.second]+1;
res.push({p,q});
}
}
}
return 0;
}
int main(){
int n;
cin>>n;
while(n--){
int r,c;
cin>>r>>c;
int x,y;
for(int i=1;i<=r;i++){
for(int j=1;j<=c;j++){
cin>>a[i][j];
if(a[i][j]=='S')
x=i,y=j;
}
}
int t=bfs(x,y,r,c);
if(t)
cout<<t<<endl;
else
cout<<"oop!"<<endl;
}
return 0;
}
BFS配套部件:队列,struct/pair<,>,存储地图数组,存储遍历状态数组