poj 3984
迷宫问题
Description
定义一个二维数组:
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 0 0 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 0 Sample Output (0, 0) (1, 0) (2, 0) (2, 1) (2, 2) (2, 3) (2, 4) (3, 4) (4, 4) Source |
[Submit] [Go Back] [Status] [Discuss]
1 #include <iostream> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 #include <iostream> 6 #include <algorithm> 7 #include <cmath> 8 #include <queue> 9 using namespace std; 10 #define pi acos(-1.0) 11 typedef long long ll; 12 const int N =1e4+100; 13 int a[10][10]; 14 bool vis[10][10]; 15 int px[10][10],py[10][10]; 16 int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}}; 17 void init() 18 { 19 memset(vis,0,sizeof(vis)); 20 memset(px,-1,sizeof(px));//不能初始化为0,因为横纵坐标李有0 21 memset(py,-1,sizeof(py)); 22 } 23 struct Node{ 24 int x,y,step; 25 Node(){} 26 Node(int x,int y,int step):x(x),y(y),step(step){} 27 }; 28 bool check(int x,int y){ 29 if(x>=0&&x<5&&y>=0&&y<5&&!vis[x][y]&&a[x][y]==0) 30 return true; 31 return false; 32 } 33 void print(int x,int y){ 34 if(px[x][y]!=-1&&py[x][y]!=-1){//必须都是-1,才表明到了(0,0) 35 print(px[x][y],py[x][y]); 36 } 37 printf("(%d, %d)\n",x,y); 38 } 39 void bfs(Node nod) 40 { 41 queue<Node>Q; 42 Q.push(nod); 43 while(!Q.empty()){ 44 Node tmp=Q.front(); 45 Q.pop();//只要出现在queue里,就一定被标记了。因此不需要在标记tmp 46 if(tmp.x==4&&tmp.y==4){ 47 print(4,4); 48 break; 49 } 50 for(int i=0;i<4;i++){ 51 int x=tmp.x+dir[i][0]; 52 int y=tmp.y+dir[i][1]; 53 if(check(x,y)){ 54 vis[x][y]=1;//不标记的话,前面的点在不断变化,无法打印 55 px[x][y]=tmp.x;//(x,y)前面那个点的横坐标为tmp.x 56 py[x][y]=tmp.y; 57 Q.push(Node(x,y,tmp.step+1));//+1 58 } 59 } 60 } 61 } 62 int main() 63 { 64 for(int i=0;i<5;i++){ 65 for(int j=0;j<5;j++){ 66 scanf("%d",&a[i][j]); 67 } 68 } 69 init(); 70 vis[0][0]=1; 71
//vis[0][0]=1;
//对于样例来说,不写vis[0][0]==1的话。 (0,0)的前一个点是(1,0),不是(-1,-1)。
//这样的话print 无限下去了。
//如果不打印的话,vis[0][0]可以不用==1的。
73 bfs(Node(0,0,0)); 74 return 0; 75 }
转载于:https://www.cnblogs.com/tingtin/p/10513543.html
poj 3984相关推荐
- K - 迷宫问题 POJ - 3984
K - 迷宫问题 POJ - 3984 5*5迷宫,输出从(0,0)走到(4,4)的最短路径 类似康托,自己弄个一一对应的公式即可 #include<iostream> #include& ...
- 【POJ3126 Prime Path】【POJ 3087 Shuffle'm Up】【UVA 11624 Fire!】【POJ 3984 迷宫问题】
POJ3126Prime Path 给定两个四位素数a b,要求把a变换到b 变换的过程要 每次变换出来的数都是一个 四位素数,而且当前这步的变换所得的素数 与 前一步得到的素数 只能有一个位 ...
- POJ 3984 迷宫问题 (Dijkstra)
迷宫问题 Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, ...
- POJ - 3984+POJ - 3414(BFS+路径记录)
题目一 迷宫问题 题目链接: http://poj.org/problem?id=3984 题目: Description 定义一个二维数组: int maze[5][5] = {0, 1, 0, 0 ...
- POJ 3984 迷宫问题 BFS DFS两种解法
题目地址:点这里 迷宫问题 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 18495 Accepted: 10947 Descr ...
- poj 3984 迷宫问题 BFS
/* 题目: 求最少时间从(0,0)走到(4,4)的路径 分析: 纯粹BFS题目,不过需要打印路径,可以用数组记录当前的坐标的上一个坐标, 因为BFS构造出一棵BFS最优生成树,每一个节点的父母节点都 ...
- POJ 3984 迷宫问题 BFS求最短路线+路径记录
迷宫问题 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 31050 Accepted: 17826 Descriptio ...
- 迷宫问题 POJ - 3984
题目 定义一个二维数组: 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 ...
- POJ 3984 迷宫问题
定义一个二维数组: 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, ...
最新文章
- Scrapy框架中管道的使用
- 鼠标在linux下如何工作,Linux操作系统下的鼠标操作
- BASIC-2 01字串
- 折半查找算法及分析(手工过程)
- 中南大学计算机网.doc,中南大学计算机网络习题2014-2.doc
- tomcat日志中出现乱码
- WinAPI: Rectangle - 绘制矩形
- 易华录数据湖事业部安全中心招聘中高级安全工程师2-4人
- Matplotlib可视化数据分析图表下(常用图表的绘制、折线图、柱形图、直方图、饼形图、散点图、面积图、热力图、箱形图、3D图表、绘制多个图表、双y轴可视化图表、颜色渐变图)
- 惠普m1216硒鼓清零步骤_hpm1213nf清零
- 明解C语言 入门 课后习题练习答案 第三章
- Freeradius认证
- 精选教程:来亲手开发个问答社区,干掉知乎!
- 在CAD制图软件中标注数学公式的操作技巧
- 新零售如何做到线上线下相结合?
- 301、404、200、304等HTTP状态
- 解决编译错误 Could not find android.arch.navigation:navigation-fragment-ktx:2.3.1.
- python——常用功能之文本处理
- 程序员Mac开发软件工具推荐
- 用sklearn判断ins内容是否能上热门
热门文章
- Android 经典欧美小游戏 guess who
- JavaScript基础:比较运算符——==与 ===;!=与!==
- 浏览器缓存:强缓存和协商缓存
- spring Transaction Propagation 事务传播
- Struts2数据传输的背后机制:ValueStack(值栈)
- 阻止表中出现重复项——SQL UNIQUE 约束
- 在Mac上安装Hadoop
- EditPlus 3.5 版已经发布
- 利用 CSS selector 改变悬停表格样式
- liunx 在虚拟机(VMware)下挂载光驱命令