这程序崩溃了,大佬帮忙看看到底哪崩了,我实在找不到啊!!!
#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
#include<queue>
using namespace std;
int N,M,SX,SY,a;
char map[301][301];
bool vis[301][301]={false};
struct Gar
{
int x,y,step;
Gar(int xx,int yy,int st):x(xx),y(yy),step(st) {}
};
vector<Gar> door[27]; //用来存相同传送门所抵达的位置
int bfs(int sx,int sy)
{
deque<Gar> q;
const int dx[5]={0,0,0,1,-1},dy[5]={0,1,-1,0,0};
q.push_front(Gar(sx,sy,0));
if(map[sx][sy]=='=')
{
cout<<"0";
return 0;
}
vis[sx][sy]=true;
while(!q.empty())
{
Gar u=q.front();
q.pop_front();
if(map[u.x][u.y]=='=')
{
cout<<u.step;
return u.step;
}
for(int i=1;i<=4;i++)
{
int nx=u.x+dx[i],ny=u.y+dy[i];
if(nx<=0||nx>N||ny<=0||ny>M) continue;
if(map[nx][ny]=='#') continue;
if(map[nx][ny]>='A'&&map[nx][ny]<='Z')
{
a=map[nx][ny]-64;
if(door[a][0].x==nx&&door[a][0].y==ny)
{
nx=door[a][1].x;
ny=door[a][1].y;
}
else
{
nx=door[a][0].x;
ny=door[a][0].y;
}
if(vis[nx][ny]) continue;
q.push_front(Gar(nx,ny,u.step));
vis[nx][ny]=true;
}
if(vis[nx][ny]) continue;
if(map[nx][ny]=='=')
{
cout<<u.step+1;
return u.step+1;
}
if(map[nx][ny]=='.')
{
q.push_back(Gar(nx,ny,u.step+1));
vis[nx][ny]=true;
}
}
}
}
//一个蛮正常的广搜鸭……
int main()
{
cin>>N>>M;
for(int i=1;i<=N;i++)
for(int j=1;j<=M;j++)
{
cin>>map[i][j];
if(map[i][j]=='@')
{
SX=i;
SY=j;
}
if(map[i][j]>='A'&&map[i][j]<='Z')
{
a=map[i][j]-64;
door[a].push_back(Gar(i,j,0));
}
}
bfs(SX,SY);
return 0;
}