poj 3984 迷宫问题(BFS+路径输出)
来源:互联网 发布:长春一台网络直播 编辑:程序博客网 时间:2024/06/05 04:21
迷宫问题
Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 16571 Accepted: 9882
Description
定义一个二维数组:
它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。
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表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。
Input
一个5 × 5的二维数组,表示一个迷宫。数据保证有唯一解。
Output
左上角到右下角的最短路径,格式如样例所示。
Sample Input
0 1 0 0 00 1 0 1 00 0 0 0 00 1 1 1 00 0 0 1 0
Sample Output
(0, 0)(1, 0)(2, 0)(2, 1)(2, 2)(2, 3)(2, 4)(3, 4)(4, 4)
tip:关键在于正序输出路径,结构体数组的下标表示当前点的坐标,px,py表示上一个点的坐标;
输出路径时使用递归;
#include<cstring>#include<queue>#include<iostream>using namespace std;int map[15][15];int book[51][15];int dire[4][2]={-1,0,1,0,0,-1,0,1};int fx[10][10];int fy[10][10];struct node{int x,y;};void printpath(int x,int y){if(x==0&&y==0){cout<<"("<<0<<", "<<0<<")"<<endl; return;}printpath(fx[x][y],fy[x][y]);cout<<"("<<x<<", "<<y<<")"<<endl;}void bfs(){queue<node>q;book[0][0]=1;q.push(node{0,0});while(!q.empty()){node t=q.front();q.pop();int x=t.x;int y=t.y;if(x==4&&y==4){ printpath(4,4);return;}for(int i=0;i<4;i++){int nx=x+dire[i][0];int ny=y+dire[i][1];if(nx<0||nx>4||ny<0||ny>4)continue;if(!book[nx][ny]&&!map[nx][ny]){book[nx][ny]=1;fx[nx][ny]=x;fy[nx][ny]=y;q.push(node{nx,ny});//book[nx][ny]=0;}}}}int main(){for(int i=0;i<5;i++)for(int j=0;j<5;j++) cin>>map[i][j];bfs();return 0; }#include<iostream>#include<queue>using namespace std;int map[5][5];int book[5][5];//用于标记数组int dire[4][2]={-1,0,1,0,0,-1,0,1};//下一步搜索方向struct point{int x,y;int px,py;point(int a=0,int b=0):x(a),y(b){}}a[10][10];//记录上一点的坐标void bfs(){queue<point>q;a[0][0].px=-1;a[0][0].py=-1;book[0][0]=1;q.push(point(0,0));while(!q.empty()){point t=q.front();if(t.x==t.y&&t.x==4)break;q.pop();for(int i=0;i<4;i++){int nx=t.x+dire[i][0];int ny=t.y+dire[i][1];if(nx<0||nx>4||ny<0||ny>4)continue;if(!book[nx][ny]&&map[nx][ny]==0){book[nx][ny]=1;a[nx][ny].px=t.x;a[nx][ny].py=t.y;q.push(point(nx,ny));}}}}//递归输出路径void display(int x,int y){if(a[x][y].px!=-1&&a[x][y].py!=-1)display(a[x][y].px,a[x][y].py);cout<<"("<<x<<", "<<y<<")"<<endl;}int main(){for(int i=0;i<5;i++)for(int j=0;j<5;j++)cin>>map[i][j];bfs();display(4,4);return 0;}0 0
- poj 3984 迷宫问题(BFS+输出路径)
- poj 3984 迷宫问题 bfs输出路径
- poj 3984 迷宫问题【bfs+输出路径】
- poj 3984 迷宫问题(BFS+输出路径)
- POJ 3984 迷宫问题(BFS+路径输出)
- POJ - 3984 迷宫问题 (BFS+前缀处理输出路径)
- poj 3984 迷宫问题(BFS+路径输出)
- K - 迷宫问题 POJ 3984 BFS路径输出
- POJ 3984:迷宫问题 bfs+递归输出路径
- POJ 3984 迷宫问题 手写队列+BFS路径输出
- POJ 3984 迷宫问题(BFS:迷宫最短路径且输出路径)
- POJ 3984---迷宫问题(BFS,迷宫最短路径且输出路径)
- POJ 3984:迷宫问题(BFS+路径记录)
- POJ 3984 迷宫问题 BFS 记录路径
- POJ 3984--迷宫问题【BFS && 记录路径】
- poj 3984 迷宫问题 【bfs + 路径记录】
- POJ 3984 迷宫问题 BFS+记录路径
- POJ 3984 迷宫问题 【BFS+路径记录】
- java,linux转义字符区别
- 人脸检测——Faster R-CNN
- LeetCode 206. Reverse Linked List 解题报告
- 更改NavigationView侧滑菜单文字颜色
- laravel框架 即点即改
- poj 3984 迷宫问题(BFS+路径输出)
- 析构函数
- Android自动更新:这里的更新静悄悄~
- 定时器
- Android 自定义listview的下拉刷新
- ECMAScript 6 学习笔记----对象的扩展
- Android studio 使用Zxing二维码扫描,过程及问题汇总
- latex 画直线
- Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) C. Ray Tracing