80分求助,第二个和第四个点没过
查看原帖
80分求助,第二个和第四个点没过
541553
wangshi楼主2021/10/7 10:33
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<queue>
#include<cstring>
using namespace std;
int dx[5]={1,0,-1,0};
int dy[5]={0,1,0,-1};
char a[2001][2001];
bool f[2001][2001];
int n,m,xm,ym,xd,yd,ans;
struct xy
{
	int x,y,s;
};
queue<xy>q;
int bfs();
int main()
{
	memset(f,false,sizeof(f));
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			cin>>a[i][j];
			if(a[i][j]=='m')
			{
				xm=i,ym=j;
			}
			if(a[i][j]=='d')
			{
				xd=i,yd=j;
			}			
		}
	}
	if(bfs()!=-1)
	{
		cout<<ans;
	}
	else
	{
		printf("NO Way");		
	}
	return 0;
}
int bfs()
{
	xy b;
	b.x=xm,b.y=ym,b.s=0;
	q.push(b);
	while(!q.empty())
	{
		b=q.front(),q.pop();
		for(int i=0;i<4;i++)
		{
			xy c;
			c.x=b.x+dx[i],c.y=b.y+dy[i],c.s=b.s;
			if(c.x==xd&&c.y==yd)
			{
				ans=++c.s;
				return ans; 
			}
			if(c.x<1||c.x>n||c.y>m||c.y<1||a[c.x][c.y]=='#'||f[c.x][c.y]) continue;
			f[c.x][c.y]=true;
			c.s++;
			q.push(c);
		}
	}
	return -1;
}

2021/10/7 10:33
加载中...