bfs 迷宫输出最短路径
来源:互联网 发布:年轻员工管理知乎 编辑:程序博客网 时间:2024/06/05 03:47
想法:用step[maxn][maxn]数组储存每个位置需要的最小步数
用dir[maxn][maxn]存储上个节点过来的方向,由于是bfs,到这个位置的时候如果步数最小,那么方向一定是唯一的。所以每个位置的dri只会被更新一次
还需要一个visit数组储存是否访问(也可以把map设置成false,因为一个地方被visit以后相当于这里就是墙了)
注意这里涉及到deque的使用,
deque有
push_back
,push_front,
pop_back,
pop_front,
back,
front方法
#include <iostream>#include <queue>#include <deque>using namespace std;int sx,sy,dx,dy;const int maxn=10005;bool visit[maxn][maxn];int dir[maxn][maxn];bool map[maxn][maxn];int step[maxn][maxn];int M,N;const int INF=999999;int tx[]={0,0,-1,1};int ty[]={-1,1,0,0};typedef struct{ int x,y;}Point;int bfs(int x,int y){ visit[x][y]=true; queue<Point> Q; Point cur; cur.x=x,cur.y=y; Q.push(cur); while(!Q.empty()){ cur=Q.front(); Q.pop(); if(cur.x==dx&&cur.y==dy) return step[cur.x][cur.y]; Point next; for(int i=0;i<4;i++){ next.x=cur.x+tx[i],next.y=cur.y+ty[i]; if(map[next.x][next.y]&&!visit[next.x][next.y]){ Q.push(next); visit[next.x][next.y]=true; dir[next.x][next.y]=i+1; step[next.x][next.y]=step[cur.x][cur.y]+1; } } } return INF;}void print(int x,int y){ deque<Point> path; Point next; while(x!=sx||y!=sy){ next.x=x,next.y=y; path.push_back(next); if(dir[x][y]==1) y++; else if(dir[x][y]==2) y--; else if(dir[x][y]==3) x++; else if(dir[x][y]==4) x--; else return ; } next.x=sx,next.y=sy; path.push_back(next); while(!path.empty()){ next=path.back(); path.pop_back(); printf("(%d,%d)\n",next.x,next.y); }}int main(int argc, char const *argv[]){ while(cin>>M>>N){ memset(map,false,sizeof(map)); memset(dir,0,sizeof(dir)); memset(visit,false,sizeof(visit)); for(int i=1;i<=M;i++){ for(int j=1;j<=N;j++){ cin>>map[i][j]; } } cin>>sx>>sy>>dx>>dy; cout<<bfs(sx,sy)<<endl;; print(dx,dy); // for(int i=1;i<=M;i++){ // for(int j=1;j<=N;j++){ // cout<<dir[i][j]<<" "; // } // cout<<endl; // } // cout<<endl; // for(int i=1;i<=M;i++){ // for(int j=1;j<=N;j++){ // cout<<map[i][j]<<" "; // } // cout<<endl; // } // cout<<endl; // for(int i=1;i<=M;i++){ // for(int j=1;j<=N;j++){ // cout<<step[i][j]<<" "; // } // cout<<endl; // } // cout<<endl; } /* code */ return 0;}
0 0
- bfs 迷宫输出最短路径
- 迷宫最短路径(bfs)
- BFS 迷宫最短路径
- POJ 3984 迷宫问题(BFS:迷宫最短路径且输出路径)
- POJ 3984---迷宫问题(BFS,迷宫最短路径且输出路径)
- BFS 迷宫的最短路径问题
- BFS:迷宫的最短路径
- BFS求迷宫的最短路径
- 小白书之迷宫最短路径bfs
- BFS求解迷宫最短路径
- BFS 模板 【迷宫的最短路径】
- 迷宫的最短路径 -- BFS
- 迷宫问题之最短路径bfs
- BFS 迷宫的最短路径
- 迷宫最短路径长度bfs
- 迷宫的最短路径 (BFS)
- 迷宫的最短路径(bfs)
- 迷宫最短路径问题-BFS
- 顺序表应用3:元素位置互换之移位算法
- 微信帐号相关总结
- 使用VirtualBox在Ubuntu下虚拟Windows XP共享文件夹设置方法
- 基于注解的struts action跳转 @Result 跳转到另一个action
- 斐波那契数列
- bfs 迷宫输出最短路径
- 线性链表排序
- python 识别验证码
- centos 7 安装与配置java
- IOS 开发 手势使用
- 基本名字与地址转换
- SQL SERVER 字符串函数
- RabbitMQ从入门到精通
- I/O复用