注意每次bfs要将dist 和st数组初始化一下,因为要测试多组数据,所以可能上组数据会对该组数据产生影响。一个简单的bfs
#include<bits/stdc++.h>
using namespace std;
const int N=210;
char g[N][N];
int dx[4]={-1,0,1,0},dy[4]={0,-1,0,1};
int n,r,c;
int dist[N][N];//表示从出发点到所在点的最短距离。
typedef pair<int,int> PII;
bool st[N][N];
void bfs(int a,int b)
{
memset(dist,-1,sizeof dist);
memset(st,0,sizeof st);
dist[a][b]=0;
queue<PII>q;
q.push({a,b});
st[a][b]=1;
while(q.size())
{
auto t=q.front();
q.pop();
int x=t.first,y=t.second;
for(int i=0;i<4;i++)
{
int x1=x+dx[i],y1=y+dy[i];
if(x1>=0&&x<r&&y1>=0&&y1<c&&g[x1][y1]!='#'&&!st[x1][y1])
{
q.push({x1,y1});
st[x1][y1]=1;
dist[x1][y1]=dist[x][y]+1;
if(g[x1][y1]=='E')
{
cout<<dist[x1][y1]<<endl;
return ;
}
}
}
}
cout<<"oop!"<<endl;
return ;
}
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
memset(g, '#', sizeof(g));//初始化地图,各个点都是墙
cin>>r>>c;
int t1,t2;
for(int i=0;i<r;i++)
{
for(int j=0;j<c;j++)
{
cin>>g[i][j];
if(g[i][j]=='S')
{
t1=i,t2=j;
}
}
}
bfs(t1,t2);
}
return 0;
}