标签:问题 cur int 迷宫 bfs donut && hole include
定义一个二维数组:
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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。