求助!58pts!
查看原帖
求助!58pts!
882092
zMinYu楼主2023/6/2 20:54

评测记录

#include<bits/stdc++.h>
using namespace std;
struct node
{
	int x,y;
};
int qx,qy,zx,zy;
int n,m;
char ch[305][305];
int X[3][30];
int Y[3][30];
int g[305][305];
int dx[]={1,0,-1,0};
int dy[]={0,-1,0,1};
int bfs()
{
	queue<node> q;
	memset(g,-1,sizeof(g));
	g[qx][qy]=0;
	q.push({qx,qy});
	while(!q.empty())
	{
		int nx=q.front().x,ny=q.front().y;
		q.pop();
		if(ch[nx][ny]>='A'&&ch[nx][ny]<='Z')
		{
			int op=(int)(ch[nx][ny]-'A'+1);
			if(X[1][op]==nx)
			{
				if(g[X[2][op]][Y[2][op]]!=-1) 
				{
					for(int i=0;i<4;i++)
					{
						int tx=nx+dx[i],ty=ny+dy[i];
						if(tx>=1&&ty>=1&&tx<=n&&ty<=m&&g[tx][ty]==-1&&ch[tx][ty]!='#')
						{
							g[tx][ty]=g[nx][ny]+1;
							q.push({tx,ty});
						}
					}
					continue;
				}
				q.push({X[2][op],Y[2][op]});
				g[X[2][op]][Y[2][op]]=g[nx][ny];
			}
			else
			{
				if(g[X[1][op]][Y[1][op]]!=-1) 
				{
					for(int i=0;i<4;i++)
					{
						int tx=nx+dx[i],ty=ny+dy[i];
						if(tx>=1&&ty>=1&&tx<=n&&ty<=m&&g[tx][ty]==-1&&ch[tx][ty]!='#')
						{
							g[tx][ty]=g[nx][ny]+1;
							q.push({tx,ty});
						}
					}
					continue;
				}
				q.push({X[1][op],Y[1][op]});
				g[X[1][op]][Y[1][op]]=g[nx][ny];
			}
		}
		else
		{
			for(int i=0;i<4;i++)
			{
				int tx=nx+dx[i],ty=ny+dy[i];
				if(tx>=1&&ty>=1&&tx<=n&&ty<=m&&g[tx][ty]==-1&&ch[tx][ty]!='#')
				{
					g[tx][ty]=g[nx][ny]+1;
					q.push({tx,ty});
				}
			}
		}
	}
	return g[zx][zy];
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			cin>>ch[i][j];
			if(ch[i][j]=='=')
			{
				zx=i,zy=j;
			}
			else if(ch[i][j]=='@')
			{
				qx=i,qy=j;
			}
		}
	}
	for(int k=1;k<=26;k++)
	{
		char op=k+'A'-1;
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<=m;j++)
			{
				if(ch[i][j]==op)
				{
					if(!X[1][k])
					{
						X[1][k]=i;
						Y[1][k]=j;
					}
					else
					{
						X[2][k]=i;
						Y[2][k]=j;
					}
				}
			}
		}
	}
	cout<<bfs();
	return 0;
}
2023/6/2 20:54
加载中...