0分BFS求调!!!(玄关)
查看原帖
0分BFS求调!!!(玄关)
942118
Minecraft_Sep楼主2024/1/18 08:35
#include<bits/stdc++.h>
using namespace std;
struct node
{
	int x;
	int y;
	int s;//步数 
} que[10001];
int head,tail,r,s,p,q;
char c[1001][1001];//保存地图
bool flag;//标记是否达到目标点,0未到,1已到
int a[4]={-1,1,0,0},b[4]={0,0,-1,1};//可走的组合
bool f[1001][1001];//记录已走的点
void bfs()
{
	while(head<tail)//队列不为空时操作
	{
		for(int i=0;i<=3;i++)//枚举四个方向
		{
			int xx=que[head].x+a[i];
			int yy=que[head].y+b[i];
			if(xx>=1&&xx<=r&&yy>=1&&yy<=s&&c[xx][yy]=='.'&&!f[xx][yy])//判断x,y下一步是否可走且是否走过
			{
				f[xx][yy]=1;//标记已走
				que[tail].x=xx;
				que[tail].y=yy; //更新xx和yy的值
				que[tail].s=que[head].s+1;//步数是父亲的步数+1
				tail++; 
			}
			if(xx==p&&yy==q)//如果找到目标点
			{
				flag=1;//标记已完成
				break;//退出	
			} 
		} 
		if(flag==1) break;
		head++;//head++才能对后面的点进行二次扩展 
	} 
} 
int main()
{
	cin>>r>>s;
	for(int i=1;i<=r;i++)
	{
		for(int j=1;j<=s;j++)
		{
			cin>>c[i][j];
		}
	}
	p=r;q=s;//终点坐标
	head=1;tail=1;
	que[tail].x=1; que[tail].y=1; que[tail].s=0+1;
	tail++;
	f[1][1]=1;
	flag=0;
	//初始化
	bfs();
	cout<<que[tail].s<<endl;
	return 0;
}
2024/1/18 08:35
加载中...