各位大佬求助!!!我崩了
查看原帖
各位大佬求助!!!我崩了
488775
Cuiyi_SAI楼主2021/7/28 21:45

这程序崩溃了,大佬帮忙看看到底哪崩了,我实在找不到啊!!!


#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;
} 
2021/7/28 21:45
加载中...