Too Short 求助
查看原帖
Too Short 求助
280502
Pine_applee楼主2020/5/6 14:23
#include<bits/stdc++.h>
using namespace std;

char f[500][500];
int vis[500][500];
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
int m,n,Ax,Ay,Bx,By,cx,cy;

struct node
{
	int x,y,step;
	node(){}
	node(int x,int y,int step):x(x),y(y),step(step){}
};

int check(int x,int y)
{
	for (int i=1;i<=n;i++)
	{
		for (int j=1;j<=m;j++)
		{
			if (i!=x&&j!=y&&f[i][j]==f[x][y])
			{
				cx=i;
				cy=j;
			}
		}
	}
}

void bfs()
{
	queue<node> Q;
	Q.push(node(Ax,Ay,0));
	vis[Ax][Ay]=1;
	while (!Q.empty())
	{
		node s=Q.front();
		Q.pop();
		if (f[s.x][s.y]=='=')
		{
			cout<<s.step;
			return ;
		}
		if (f[s.x][s.y]>='A'&&f[s.x][s.y]<='Z')
		{
			check(s.x,s.y);
			s.x=cx,s.y=cy;
		}
		for (int i=0;i<4;i++)
		{
			int xx=s.x+dx[i],yy=s.y+dy[i];
			if (f[xx][yy]!='#'&&!vis[xx][yy]&&xx>=1&&xx<=n&&yy>=1&&yy<=m)
			{
				vis[xx][yy]=1;
				Q.push(node(xx,yy,s.step+1));
			}	
		}		
	}
}

int main()
{
	
	cin>>n>>m;
	for (int i=1;i<=n;i++)
	{
		for (int j=1;j<=m;j++)
		{
			cin>>f[i][j];
			if (f[i][j]=='@') {Ax=i,Ay=j;}
		}
	}
	bfs();
}
2020/5/6 14:23
加载中...