POJ 3984 迷宫问题 (路径记录)
来源:互联网 发布:为什么淘宝店铺进不去 编辑:程序博客网 时间:2024/05/17 01:48
K - 迷宫问题
Crawling in process...Crawling failedTime Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64uDescription
定义一个二维数组:
它表示一个迷宫,其中的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)
刚学的记录路径。
不过BFS的部分不是我以前那种写法,还是感觉有点生涩。
其他大体上差不多吧。
#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}};int map[6][6];int rear=1;int front=0;struct node{int x,y;int pre;};node q[36];void output(int i){if(q[i].pre!=-1){output(q[i].pre);//用递归输出路径。printf("(%d, %d)\n",q[i].x,q[i].y);}}void bfs(int x,int y){int i;q[front].x=x;q[front].y=y;q[front].pre=-1;map[x][y]=1;while(front<rear){for(i=0;i<4;i++){int nx=q[front].x+dir[i][0];int ny=q[front].y+dir[i][1];if(nx>=5 ||nx<0 ||ny>=5 ||ny<0 ||map[nx][ny])continue;map[nx][ny]=1;q[rear].x=nx;q[rear].y=ny;q[rear++].pre=front;//入队+记录路径。if(nx==4 &&ny==4)output(front);}front++;//出队}}int main(){ int i,j;for(i=0;i<5;i++)for(j=0;j<5;j++)scanf("%d",&map[i][j]);printf("(0, 0)\n");bfs(0,0);printf("(4, 4)\n");}
又学了种自己熟悉的写法。
简单清楚。。
#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;#include <queue>int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}};int map[10][10];struct node{intx,y;};node pre[10][10];bool check(int x,int y){if(x>=5 ||y>=5 ||x<0||y<0||map[x][y])return 0;return 1;}void find(node now){if(now.x==0 &&now.y==0){printf("(%d, %d)\n",now.x,now.y);return;}find(pre[now.x][now.y]);printf("(%d, %d)\n",now.x,now.y);}void bfs(){ queue<node>q;node st,ed;st.x=0;st.y=0;int i;q.push(st);while(!q.empty()){st=q.front();q.pop();if(st.x==4 &&st.y==4)break;for(i=0;i<4;i++){ed.x=st.x+dir[i][0];ed.y=st.y+dir[i][1];if(!check(ed.x,ed.y))continue;map[ed.x][ed.y]=1;pre[ed.x][ed.y]=st;q.push(ed);}}find(st);}int main(){int i,j;for(i=0;i<5;i++)for(j=0;j<5;j++)scanf("%d",&map[i][j]);map[0][0]=1;bfs();}
0 0
- POJ 3984 迷宫问题 (路径记录)
- POJ 3984:迷宫问题(BFS+路径记录)
- POJ 3984 迷宫问题 BFS 记录路径
- POJ 3984--迷宫问题【BFS && 记录路径】
- poj 3984 迷宫问题 【bfs + 路径记录】
- POJ 3984迷宫问题(记录路径)
- POJ 3984 迷宫问题 BFS+记录路径
- POJ 3984 迷宫问题 【BFS+路径记录】
- poj 3984 迷宫问题 BFS+路径记录
- poj--3984--迷宫问题(bfs+路径记录)
- poj 3984 迷宫问题(bfs, 记录路径)
- POJ 3984 迷宫问题(记录路径的搜索)
- POJ 3984 迷宫问题(BFS+路径记录)
- poj 3984 迷宫问题 【BFS + 优先队列 + stack路径记录】
- POJ 3984 迷宫问题 广搜记录路径
- poj 迷宫问题(路径记录)(DFS,BFS)
- POJ.3894 迷宫问题 (BFS+记录路径)
- 迷宫问题 (广搜+记录路径)
- [LeetCode] Factorial Trailing Zeroes
- 1292.圣诞老人
- Android应用程序资源的编译和打包过程分析
- 1012_数字分类 (20)
- maven 学习笔记(三)-创建简单的eclipse+android+maven工程2(带子测试工程)
- POJ 3984 迷宫问题 (路径记录)
- JQuery使用Ajax同步提交数据
- IOS中文排序学习
- poj 1163 数塔
- 创建需求任意大小的文件的多种方式
- iOS 开发 入门:真机测试
- oracle查看表、表字段和常用的一些命令
- 寒假之作—HDU—Eddy’s的洗牌问题
- 23种设计模式之十七(行为模式)Memento模式