POJ 3984 BFS广搜——路径输出模板

题目链接:http://poj.org/problem?id=3984

 我是先看了大神的模板,照着自己写了一个题。好不容易AC了

大神模板:https://blog.csdn.net/b2utyyomi/article/details/51175700

我的AC代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
struct node
{
	int x;
	int y;
	int step;
};
node qq[10][10];
int map[10][10],vis[10][10];
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
int bfs()
{
	memset(vis,0,sizeof(vis));
	queue<node>q;
	node next;
	node cur;

	cur.x=0;
	cur.y=0;
	cur.step=0;
	q.push(cur); //入栈 
	vis[0][0]=1;
	while(!q.empty())
	{
	cur=q.front();
	q.pop();
	if(cur.x==4&&cur.y==4)  //此题是4,4点,可以随便设置 
	{
		return cur.step;  //返回的是走的步数 
		}	
		for(int i=0;i<=3;i++) //四个方向 
		{
			int tx=dx[i]+cur.x;
			int ty=dy[i]+cur.y;
			if(tx<0||tx>4||ty<0||ty>4||vis[tx][ty]==1||map[tx][ty]==1)
			 continue;
			 vis[tx][ty]=1; 
			 next.x=tx;
			 next.y=ty;
			 next.step=cur.step+1;
			 qq[tx][ty].x=cur.x; //qq存储上一个点的x和y 
			 qq[tx][ty].y=cur.y;
			 q.push(next);
		}
	}
return -1;
 } 
 void pri(int sx,int sy)   //输出的函数,sx,sy代表终点
 {
 	if(sx==0&&sy==0)
 	{	
    printf("(%d, %d)\n", sx, sy);
    return;
	 }
 	pri(qq[sx][sy].x,qq[sx][sy].y);//qq存储的是sx,sy上一个点的x和y 								//用递归实现了路径输出 
    printf("(%d, %d)\n", sx, sy);
 }
int main()
{
	
	int i,j;
	for(i=0;i<5;i++)    //读入迷宫 
	for(j=0;j<5;j++)
	scanf("%d",&map[i][j]);
	int x=0,y=0;   //这个题是从00点开始 这个地方可以重新定义一个node,传入起点 
	int ans=bfs();
	if(ans>0)
	{
	pri(4,4);
	}
	
	return 0;
	
} 

猜你喜欢

转载自blog.csdn.net/zvenWang/article/details/81980514