求助,玄关
查看原帖
求助,玄关
672757
封禁用户楼主2024/7/7 15:17
#include<bits/stdc++.h>
using namespace std;
int n,m;
int jia[5][3]={{0,0,0},{0,1,0},{0,0,1},{0,-1,0},{0,0,-1}}; 
struct wz
{
	int a,b;
	int s;
}c,q;
string nn[305];
int m2[305][305]={};
void fd(wz &wy)
{
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
		{
			if(nn[i][j]==nn[wy.a][wy.b]&&(i!=wy.a||j!=wy.b))
			{
				wy.a=i;
				wy.b=j;
				break;
			}
		}
	}
}
void dd()
{
	queue<wz>mm;
	mm.push(q);
	wz ne,wy;
	for(int i=1;;i++)
	{
		if(mm.empty())
		{
			break;
		}
		wy=mm.front();
		mm.pop();
		if(nn[wy.a][wy.b]=='=')
		{
			cout<<wy.s;
			break;
		}
		if(nn[wy.a][wy.b]>='A'&&nn[wy.a][wy.b]<='Z')
		{
			fd(wy);
		}
		m2[wy.a][wy.b]=1;
		for(int i=1;i<=4;i++)
		{
			int x=wy.a,y=wy.b,ss=wy.s+1;
			for(int i=1;i<=4;i++)
			{
				if(!m2[wy.a][wy.b]&&x+jia[i][1]>-1&&x+jia[i][1]<n&&y+jia[i][2]>-1&&y+jia[i][2]<m&&nn[x+jia[i][1]][y+jia[i][2]]!='#')
				{
					ne.a=x+jia[i][1];
					ne.b=y+jia[i][2];
					ne.s=ss;
					mm.push(ne);
				}
			}
		}
	}
	cout<<-1;
}
int main()
{
	cin>>n>>m;
	c.a=c.b=q.a=q.b=-1;
	c.s=q.s=0;
	for(int i=0;i<n;i++)
	{
		cin>>nn[i];
		if(c.a<0&&nn[i].find("=")!=string::npos)
		{
			c.a=i;
			c.b=nn[i].find("=");
		}
		if(q.a<0&&nn[i].find("@")!=string::npos)
		{
			q.a=i;
			q.b=nn[i].find("@");
		}
	}
	dd();
    return 0;
}

只输出-1

2024/7/7 15:17
加载中...