RE了一大片
查看原帖
RE了一大片
178128
杨凯楼主2020/10/2 20:42
#include<bits/stdc++.h>
using namespace std;
int mapp[500][500];
bool v[500][500];
int n,m,sx,sy;
int dir[4][2]={{0,1},{0,-1},{-1,0},{1,0}};
struct field
{
	int x;
	int y;
	int step;
}f;
struct field move(int xx,int yy,int zz)
{
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			if((mapp[xx][yy]==mapp[i][j])&&(xx!=i&&yy!=j))
			{	
			   struct field ss;
			   ss.x=i;
			   ss.y=j;
			   ss.step=zz;
			   return ss;
			}
		}
	}
}
void bfs()
{
	queue<struct field >q;
	struct field  s;
	s.x=sx;
	s.y=sy;
	s.step=0;
	v[sx][sy]=1;
	q.push(s); 
	while(!q.empty())
	{
		struct field  s0;
		s0=q.front();
		q.pop();
		if(mapp[s0.x][s0.y]>='A'&&mapp[s0.x][s0.y]<='Z')
		{
			s0=move(s0.x,s0.y,s0.step);
		}
		for(int i=0;i<4;i++)
		{
			int xx,yy;//!
			xx=s0.x+dir[i][0];
			yy=s0.y+dir[i][1];
			if(!(xx>=1&&xx<=n&&yy>=1&&yy<=m))continue;
			struct field  s1;
			s1.x=xx;
			s1.y=yy;
			s1.step=s0.step+1;
			if(mapp[xx][yy]==2)
			{
				cout<<s1.step;
				return;
			}
			if(mapp[xx][yy]&&(!v[xx][yy]))
			{
			   v[xx][yy]=1;
			   q.push(s1);	
			}
		}
	}
}
int main() 
{
	char s;
	cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
    	for(int j=1;j<=m;j++)
    	{
    		cin>>s;
    		if(s=='.')mapp[i][j]=1;
    		if(s>='A'&&s<='Z')mapp[i][j]=s;
    		if(s=='@')
			{
			  sx=i;
			  sy=j;
			  mapp[i][j]=1;
		    }
    		if(s=='=')mapp[i][j]=2;
		}
	}
	bfs();
	return 0;
}
2020/10/2 20:42
加载中...