迷宫bfs+路径记录
Posted emcikem
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迷宫bfs+路径记录相关的知识,希望对你有一定的参考价值。
给定5*5的地图,1表示墙,0表示空地,从左上角走到左下角
是把所有的可走路径都记录下来了,但是
搜索有递归与非递归形式
本代码使用非递归形式
bfs+路径记录
对于num[i].pre=head的理解是他存在很多条路,每个点是从上一个点走过来的,但总存在一条路是到达终点的,所以,只需要得到到终点的一个head就可以顺着这个路径标记回去了
#include <iostream>
#include <cstdio>
using namespace std;
char a[10][10];
int dir[4][2]=1,0,-1,0,0,1,0,-1;
struct node
int x,y;
int pre;
num[1200];
void print(int n)//输出路径,当xx与yy到达终点的时候,就把head传入,
if(num[n].pre != -1)
print(num[n].pre);
printf("(%d, %d)\n",num[n].x,num[n].y);
void bfs()
int head=0;
int rear=0;
num[rear].x=0,num[rear].y=0,num[rear++].pre=-1;//初始路径记录
while(head<rear)
for(int i=0;i<4;i++)
int xx=num[head].x+dir[i][0];
int yy=num[head].y+dir[i][1];
if(xx>=5||xx<0||yy>=5||yy<0||a[xx][yy]==1)continue;
a[xx][yy]=1;//标记走过了
num[rear].x=xx;
num[rear].y=yy;
num[rear].pre=head;
rear++;//rear的值一只增加,只要一个点的4个方向存在空地
if(xx==4&&yy==4)print(head);
head++;
int main()
for(int i=0;i<5;i++)
for(int j=0;j<5;j++)
scanf("%d",&a[i][j]);
printf("(0, 0)\n");
bfs();
printf("(4, 4)\n");
return 0;
以上是关于迷宫bfs+路径记录的主要内容,如果未能解决你的问题,请参考以下文章