60分求助
查看原帖
60分求助
1059565
liuyinuo666楼主2024/12/2 21:47

求捞

#include<bits/stdc++.h>
#define int long long
using namespace std;	
int gx,gy,mx,my;
bool vis[32][32][32][32];
char a[32][32];
int gfx[]={1,0,-1,0};
int gfy[]={0,1,0,-1};
int mfx[]={1,0,-1,0};
int mfy[]={0,-1,0,1};
int r,c;
struct node
{
	int gx,gy,mx,my,step;
};
bool in(int x,int y)
{
	return x>=1 && x<=r && y>=1 && y<=c;
}
signed main()
{

	cin>>r>>c;
	for(int i=1;i<=r;i++)
	{
		for(int j=1;j<=c;j++)
		{
			cin>>a[i][j]; 
			if(a[i][j]=='G') gx=i,gy=j;
			if(a[i][j]=='M') mx=i,my=j;
		}
	}
	queue<node> q;
	q.push({gx,gy,mx,my,0});
	while(!q.empty())
	{
		auto t=q.front();
		q.pop();
		int gx=t.gx,gy=t.gy,mx=t.mx,my=t.my,step=t.step;
		if(a[gx][gy]=='T' && a[mx][my]=='T')
		{
			cout<<step;
			return 0;
		}
		for(int i=0;i<4;i++)
		{
			int ngx=gx+gfx[i],ngy=gy+gfy[i],nmx=mx+mfx[i],nmy=my+mfy[i];
			if(in(ngx,ngy) && in(nmx,nmy) && a[ngx][ngy]!='X' && a[nmx][nmy]!='X' && !vis[ngx][ngy][nmx][nmy])
			{
				
			    if(a[ngx][ngy]=='#' && a[nmx][nmy]=='#') continue; 
				vis[ngx][ngy][nmx][nmy]=1;
				if(a[ngx][ngy]=='#') ngx=gx,ngy=gy;
				if(a[nmx][nmy]=='#') nmx=mx,nmy=my;
				q.push({ngx,ngy,nmx,nmy,step+1});
			}
		}
	}
	cout<<"no";
}
2024/12/2 21:47
加载中...