wa的好!!!!!
查看原帖
wa的好!!!!!
1168588
FASTergood楼主2024/9/19 19:33

已经调魔怔了,求改啊改

#include<bits/stdc++.h>
//#define int long long;
using namespace std;
pair<int,int>s;
const int N=500;
char a[N][N];
int n,m,cnt=0;
int st[N][N];
int dx[]={0,0,-1,1};
int dy[]={1,-1,0,0};
typedef pair<int,int> PII;
queue<PII>q;
int dist[N][N];
pair<int ,int>find(int &x,int &y,char t)
{
// cout<<x<<" "<<y<<endl;
	for(int i=0;i<n;i++)
		for(int j=0;j<m;j++)
		{
			if(a[i][j]==t&&(i!=x||j!=y))
			{
			//	cout<<i<<" "<<j<<endl;
				return {i,j};
			}
		}
	
}
int bfs()
{

	while(q.size())
	{
		auto now=q.front();
		q.pop();
		int x=now.first;
		int y=now.second;
		//cout<<x<<" "<<y<<"wewwqeqqwq"<<dist[x][y]<<endl;
		if(a[x][y]>='A'&&a[x][y]<='Z')
		{
			//cout<<x<<" "<<y<<"t1"<<endl;
			auto [nx, ny] = find(x, y, a[x][y]);  
			if (nx != -1 && ny != -1) {  
				dist[nx][ny]=dist[x][y];
				x = nx;  
				y = ny;  
				
			}  
			//cout<<x<<" "<<y<<"t2"<<endl;
		}
	//	cout<<x<<" "<<y<<endl;
		if(a[x][y]=='=')return dist[x][y];
		for(int i=0;i<4;i++)
		{
			int nx=x+dx[i];
			int ny=y+dy[i];
			if(nx<0&&ny<0&&nx>n&&ny>m&&a[nx][ny]=='#')
				continue;
			if(dist[nx][ny]>0)	
				dist[nx][ny]=min(dist[nx][ny],dist[x][y]+1);
			else dist[nx][ny]=dist[x][y]+1;
		//	cout<<a[x][y]<<endl;
			q.push({nx,ny});
			
		}
	}
}
signed main()
{
	cin>>n>>m;
	for(int i=0;i<n;i++)
		for(int j=0;j<m;j++)
		{
			cin>>a[i][j];
		}
//	memset(st,0,sizeof(st));
	memset(dist,-1,sizeof(dist));
	for(int i=0;i<n;i++)
		for(int j=0;j<m;j++)
		{
			if(a[i][j]=='@')
			{
				q.push({i,j});
				//cout<<i<<' '<<j<<"wsws"<<endl;
				dist[i][j]=0;
			}
		}
cout<<bfs()<<endl;
}
2024/9/19 19:33
加载中...