39分蒟蒻 求大佬相助
查看原帖
39分蒟蒻 求大佬相助
464034
ypy050320楼主2021/6/6 21:15
#include <bits/stdc++.h>
using namespace std;
int n,m,x,y,tail=1,head,ans;
int tox[4]={0,0,1,-1};
int toy[4]={1,-1,0,0};
char a[301][301];
bool f[301][301];
int q[101000][3];
void bfs(int x,int y,int c)
{
	f[x][y]=0;
	q[head][0]=x;q[head][1]=y;q[head][2]=c;
	while (head<=tail)
	{
		for(int i=0;i<4;i++)
		{
			int tx=tox[i]+q[head][0],ty=toy[i]+q[head][1];
			if(a[q[head][0]][q[head][1]]=='=')
			{ans=q[head][2];return;}
			if(a[tx][ty]=='.'&&tx>0&&ty>0&&tx<=n&&ty<=m&&f[tx][ty])
			{q[tail][0]=tx;q[tail][1]=ty;q[tail][2]=q[head][2]+1;tail++;f[tx][ty]=0; }
			if(a[tx][ty]!='#'&&a[tx][ty]!='.')
			if(tx>0&&ty>0&&tx<=n&&ty<=m&&f[tx][ty])
			for(int i=1;i<=n;i++)
				for(int j=1;j<=m;j++)
				if(i!=tx||y!=ty)
				if(a[i][j]==a[tx][ty])
					{q[tail][0]=i;q[tail][1]=j;q[tail][2]=q[head][2]+1;
					f[i][j]=0;
					f[tx][ty]=0;
					tail++;break;}
		}
		head++;
	}
}
int main()
{
	memset(f,1,sizeof(f));
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
	    for(int j=1;j<=m;j++)
	    {
	    	cin>>a[i][j];
	    	if(a[i][j]=='@')
	    	{
	    		x=i;
	    		y=j;
			}
		}
	bfs(x,y,0);
	for(int i=0;i<=tail;i++)
						cout<<q[i][0]<<" " <<q[i][1]<<" " <<q[i][2]<<endl;
	cout<<ans;
	return 0;
}
2021/6/6 21:15
加载中...