迷宫问题-bfs
作者:互联网
定义一个二维数组:
int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, };
它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。
bfs搜索,用一个结构体前缀数组保存最短路径结果,然后递归打印
#include<iostream> #include<cstdio> #include<cstring> #include<queue> using namespace std; struct donut{ int x,y; }; int meme[5][5]; bool vis[5][5]; int dic[4][2]={1,0,-1,0,0,1,0,-1}; donut pre[10][10];\\pre[i][j]代表走到i,j位置前缀元素 queue<donut> hole; void print(donut cur) { if(cur.x==0&&cur.y==0) { printf("(0, 0)\n"); return; } print(pre[cur.x][cur.y]); printf("(%d, %d)\n",cur.x,cur.y);\\递归打印 } int main() { for(int i=0;i<5;i++) for(int j=0;j<5;j++) cin>>meme[i][j]; donut b;b.x=0,b.y=0;vis[0][0]=true; hole.push(b); while(!hole.empty()) { b=hole.front(); if(b.x==4&&b.y==4)\\搜索到就退出 break; hole.pop(); for(int i=0;i<4;i++) { donut m; m.x=b.x+dic[i][0];m.y=b.y+dic[i][1]; if(m.x>=0&&m.y>=0&&m.x<5&&m.y<5&&!vis[m.x][m.y]&&meme[m.x][m.y]==0) { vis[m.x][m.y]=true; pre[m.x][m.y]=b;\\pre[i][j]上表示前缀元素 hole.push(m); } } } b.x=b.y=4; print(b); return 0; }
标签:问题,cur,int,迷宫,bfs,donut,&&,hole,include 来源: https://www.cnblogs.com/zesure-blog/p/16078928.html