69pts求调
查看原帖
69pts求调
921114
_ImposterX_楼主2023/7/26 19:10
#include<bits/stdc++.h>
using namespace std;

const int MAXN=305;
int n,m;
bool vis[MAXN][MAXN];
char ch[MAXN][MAXN];
bool door[30];
int chuansong[30][MAXN][MAXN];
int step[MAXN][MAXN];
int sx,sy,ex,ey;
int dx[]={1,-1,0,0};
int dy[]={0,0,1,-1};

void bfs(int x,int y)
{
	queue<pair<int,int> > q;
	q.push(make_pair(x,y));
	vis[x][y]=true;
	while(q.size())
	{
		int xx=q.front().first;
		int yy=q.front().second;
		q.pop();
//		cout<<xx<<' '<<yy<<'\n'; 
		for(int i=0;i<4;i++)
		{
			int xxx=xx+dx[i];
			int yyy=yy+dy[i];
			if(xxx<1||xxx>n||yyy<1||yyy>m) continue;
			if(ch[xxx][yyy]=='#'||vis[xxx][yyy]) continue;
			if(ch[xxx][yyy]>='A'&&ch[xxx][yyy]<='Z')
			{
				int p=ch[xxx][yyy]-'A'+1;
				int _x1=chuansong[p][1][1],_y1=chuansong[p][1][2];
				int _x2=chuansong[p][2][1],_y2=chuansong[p][2][2];
				if(xxx==_x1&&yyy==_y1)
				{
					q.push(make_pair(_x2,_y2));
					step[_x2][_y2]=step[xx][yy]+1;
				}
				else
				{
					q.push(make_pair(_x1,_y1));
					step[_x1][_y1]=step[xx][yy]+1;
				}
			}
			else
			{
				step[xxx][yyy]=step[xx][yy]+1;
	    		q.push(make_pair(xxx,yyy));
		    	vis[xxx][yyy]=true;
			}
		}
	}
}

int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>ch[i]+1;
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			if(ch[i][j]=='@') sx=i,sy=j;
			else if(ch[i][j]=='=') ex=i,ey=j;
			else if(ch[i][j]>='A'&&ch[i][j]<='Z') 
			{
				if(ch[i][j]>='A'&&ch[i][j]<='Z'&&!door[ch[i][j]-'A'+1])
				{
					chuansong[ch[i][j]-'A'+1][1][1]=i;
					chuansong[ch[i][j]-'A'+1][1][2]=j;
					door[ch[i][j]-'A'+1]=true;
				}
				else
				{
					chuansong[ch[i][j]-'A'+1][2][1]=i;
					chuansong[ch[i][j]-'A'+1][2][2]=j;
				}
			}
		}
	}
	bfs(sx,sy);
	cout<<step[ex][ey];
	return 0;
}

TLE+MLETLE+MLE 求调qwq

2023/7/26 19:10
加载中...