POJ 3984 迷宫问题 DFS
来源:互联网 发布:自动抢火车票软件 编辑:程序博客网 时间:2024/05/20 05:30
迷宫问题
Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 10818 Accepted: 6458
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)
很简单的搜索题,DFS BFS都可以。学习搜索~DFS实现,用栈保存路径,使用容器实现栈的自底输出
题目链接:POJ 3984 迷宫问题
重新编辑:后来写了一个用BFS实现的,文章地址:POJ3984 迷宫问题 BFS
ACM搜索课件下载 ACM搜索PPT (天津大学acm课件,转发请注明出处。)
#include<iostream>#include<stack>#include<cstring>#include<vector>#include<cstdio>using namespace std;struct node{ int a,b;};int maze[7][7];bool vis[7][7];stack<node>passby;void init(){ memset(vis,0,sizeof(vis)); //布尔型vis初始化0,记录是否访问过 for(int i=0;i<7;i++) //迷宫四周围墙设为1 { maze[i][0]=1; maze[0][i]=1; maze[6][i]=1; maze[i][6]=1; }}void dfs(int x,int y){ if(!vis[x][y]) // 如果没有访问过 { node cur; //cur为当前位置 cur.a=x; cur.b=y; vis[x][y]=1; //当前位置cur设为已访问 passby.push(cur); //入栈 } if(x==5&&y==5) //如果到迷宫出口 返回 return ; if(!vis[x+1][y]&&!maze[x+1][y]) //如果右面的一个没有访问过而且不是墙,就向右走 dfs(x+1,y); else if(!vis[x][y+1]&&!maze[x][y+1]) //如果下面的一个没有访问过且不是墙,向下走 dfs(x,y+1); else //右面和下面都有墙 { passby.pop(); //pop,后退一步 node cur=passby.top(); //将当前位置cur置为栈顶元素,即上一步位置 dfs(cur.a,cur.b); //对当前cur位置继续进行如上dfs操作 }}int main(){ for(int i=1;i<=5;i++) for(int j=1;j<=5;j++) scanf("%d",&maze[i][j]); //建立迷宫内部 init(); //初始化 dfs(1,1); //从头开始走 vector<node>v; //node容器,用于输出。 while(passby.empty()==false) //如果栈非空 { /*用容器实现栈的自底输出*/ v.push_back(passby.top()); //在容器尾部加入栈顶元素 passby.pop(); //pop栈顶元素 } /*这样就把栈内所有元素放入容器中*/ for(int i=v.size()-1;i>=0;i--) { printf("(%d, %d)\n",v[i].a-1,v[i].b-1); } return 0;}
0 0
- POJ 3984 迷宫问题 DFS
- poj 3984 迷宫问题【dfs】
- POJ 3984 迷宫问题 【DFS】
- POJ-3984迷宫问题dfs
- 迷宫问题 POJ dfs
- poj--3984 迷宫问题(dfs)
- POJ 3984 迷宫问题 (DFS)
- POJ - 3984 - 迷宫问题 (DFS)
- POJ 3984 迷宫问题 (DFS+BFS)
- poj 3984 迷宫问题【BFS && DFS】【简单】
- poj 3984 迷宫问题【dfs+路径输出】
- 【POJ】3984 迷宫问题 BFS 与 DFS
- POJ 3984 迷宫问题(dfs)
- poj dfs相关之3984 迷宫问题
- poj 3984 迷宫问题 dfs 求迷宫路径
- 迷宫问题(dfs)POJ
- 迷宫问题 poj 3984 搜索算法 宽搜+dfs回溯
- POJ 3984 迷宫问题 (DFS(深度优先搜索))
- Android自定义进度框
- CAN通讯的总结
- 自动生成bean层dao层以及xml层工具
- GitHub和sourceTree使用入门
- Java串口开发 进制转换
- POJ 3984 迷宫问题 DFS
- 你不知道的21个Qt隐藏功能和技巧
- Java Calendar 类的时间操作
- iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角)
- php webservice实例
- Online Judge System For SzNOI 题库 语法百题 C++ d005
- typedef和define的详细区别
- 编译器的工作过程
- PAT 1094. The Largest Generation(BFS)