POJ 3984 迷宫问题 (BFS+打印路径坐标

题目链接

题目大意:

一个 5 * 5 的迷宫,从左上角走到右下角,求最短路径 并输出

解题思路:

不会呀  然后翻了无数题解都是 记录前驱 然后 递归逆向打印

代码如下:

#include<iostream>
#include<cstring>
using namespace std;
int m[6][6];
bool vis[110][110];
int p[110];
int head;
int tail;
int d[4][2]={
   
   {-1,0},{1,0},{0,-1},{0,1}};

struct node
{
	int x;
	int y;
}a[110];

int print(int x)
{
	if(p[x]!=-1)
	{
		print(p[x]);
	}
	printf("(%d, %d)\n",a[x].x,a[x].y);
	return 0;
}

void bfs()
{
	while(head<tail)
	{
		for(int i=0;i<4;i++)
		{
			int xx=a[head].x+d[i][0];
			int yy=a[head].y+d[i][1];
			if(xx<0||xx>=5||yy<0||yy>=5)
			  continue;
			if(m[xx][yy]==1)
			   continue;
			if(vis[xx][yy]==false)
			{
				a[tail].x=xx;
				a[tail].y=yy;
				vis[xx][yy]=true;
				p[tail]=head;
				tail++;
			}
			if(xx==4&&yy==4)
			{
				print(tail-1);//tail 是指向最后一位的下一个位置(上面tail++了)
				//所以这里需要-1 
				return;
			}
		}
		head++;
	}
}
int main()
{
	int i,j;
	for(i=0;i<5;i++)
	  for(j=0;j<5;j++)
	     cin>>m[i][j];
	head=0;
	tail=0;
	a[tail].x=0;
	a[tail].y=0;
	vis[tail][tail]=true;
	p[tail]=-1;
	tail++;
	bfs();
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43819762/article/details/108955744
今日推荐