POJ 3984:迷宫问题 bfs+递归输出路径
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 11844 | Accepted: 7094 |
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
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)
bfs+记录之前的路径,输出时递归输出就可以了。
代码:
- #include <iostream>
- #include <algorithm>
- #include <cmath>
- #include <vector>
- #include <string>
- #include <cstring>
- #include <queue>
- #pragma warning(disable:4996)
- using namespace std;
- int value[7][7];
- int pre[7][7];
- int flag[7][7];
- void bfs()
- {
- memset(flag,0,sizeof(flag));
- memset(pre,-1,sizeof(pre));
- queue<int>x;
- queue<int>y;
- while(x.size())x.pop();
- while(y.size())y.pop();
- x.push(0);
- y.push(0);
- int a;
- int b;
- while(x.size())
- {
- a=x.front();
- b=y.front();
- x.pop();
- y.pop();
- flag[a][b]=1;
- if(a>0&&flag[a-1][b]==0&&value[a-1][b]==0)
- {
- pre[a-1][b]=a*10+b;
- x.push(a-1);
- y.push(b);
- }
- if(b<4&&flag[a][b+1]==0&&value[a][b+1]==0)
- {
- pre[a][b+1]=a*10+b;
- x.push(a);
- y.push(b+1);
- }
- if(b>0&&flag[a][b-1]==0&&value[a][b-1]==0)
- {
- pre[a][b-1]=a*10+b;
- x.push(a);
- y.push(b-1);
- }
- if(a<4&&flag[a+1][b]==0&&value[a+1][b]==0)
- {
- pre[a+1][b]=a*10+b;
- x.push(a+1);
- y.push(b);
- }
- }
- }
- void prin(int x,int y)
- {
- if(pre[x][y]!=-1)
- {
- int y_pr=pre[x][y]%10;
- int x_pr=pre[x][y]/10;
- prin(x_pr,y_pr);
- }
- cout<<"("<<x<<", "<<y<<")"<<endl;
- }
- int main()
- {
- int i,j;
- for(i=0;i<=4;i++)
- {
- for(j=0;j<=4;j++)
- {
- cin>>value[i][j];
- }
- }
- bfs();
- prin(4,4);
- return 0;
- }
版权声明:本文为博主原创文章,未经博主允许不得转载。
POJ 3984:迷宫问题 bfs+递归输出路径的更多相关文章
- POJ - 3984 迷宫问题 BFS求具体路径坐标
迷宫问题 定义一个二维数组: 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, ...
- poj 3984 迷宫问题 bfs
学会这道水题之后我懂得了不少哈,首先水题也能学到不少知识,尤其像我这样刚入门的小菜鸟,能学到一些小技巧. 然后就是可以从别人的代码里学到不一样的思路和想法. 这题就是求最短的路径,首先想到就是用bfs ...
- POJ 3984 迷宫问题 (BFS + Stack)
链接 : Here! 思路 : BFS一下, 然后记录下每个孩子的父亲用于找到一条路径, 因为寻找这条路径只能从后向前找, 这符合栈的特点, 因此在输出路径的时候先把目标节点压入栈中, 然后不断的向前 ...
- POJ - 3984迷宫问题(最短路径输出)
题目链接:http://poj.org/problem?id=3984 题目: 迷宫问题 Time Limit: 1000MS Memory Limit: 65536K Total Submiss ...
- POJ 3984 - 迷宫问题 - [BFS水题]
题目链接:http://poj.org/problem?id=3984 Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, ...
- POJ 3984 迷宫问题 bfs 难度:0
http://poj.org/problem?id=3984 典型的迷宫问题,记录最快到达某个点的是哪个点即可 #include <cstdio> #include <cstring ...
- [POJ 3984] 迷宫问题(BFS最短路径的记录和打印问题)
题目链接:http://poj.org/problem?id=3984 宽度优先搜索最短路径的记录和打印问题 #include<iostream> #include<queue> ...
- POJ - 3984 迷宫问题 bfs解法
#include<stdio.h> #include<string.h> #include<algorithm> #include<stack> usi ...
- BFS(最短路+路径打印) POJ 3984 迷宫问题
题目传送门 /* BFS:额,这题的数据范围太小了.但是重点是最短路的求法和输出路径的写法. dir数组记录是当前点的上一个点是从哪个方向过来的,搜索+,那么回溯- */ /************* ...
随机推荐
- CH12 动态内存
动态分配的对象的生命期与它们在哪里创建的五官,只有显示地释放时,这些对象才被销毁 静态内存用来保存局部static对象.类static数据成员以及定义在任何函数之外的变量,栈内存用来保存定义在函数内的 ...
- Day3-R-Aggressive cows POJ2456
Farmer John has built a new long barn, with N (2 <= N <= 100,000) stalls. The stalls are locat ...
- 嵊州普及Day3T4
利内罗女士准备来到意大利进行修行.意大利由 n 个城市和 m 条道路构成,道路是双向的.到达第 i 个城市时,她可以取得该城市的全部信仰,并获得 ai 点能力提升,但因为在一个城市可以取得的信仰有 ...
- 简单模拟IOC容器:为添加了@Autowired的属性赋值(初始值)
创建@Autowired注解 package com.zzj.test; import java.lang.annotation.ElementType; import java.lang.annot ...
- Deepctr框架代码阅读
DeepCtr是一个简易的CTR模型框架,集成了深度学习流行的所有模型,适合学推荐系统模型的人参考. 我在参加比赛中用到了这个框架,但是效果一般,为了搞清楚原因从算法和框架两方面入手.在读代码的过程中 ...
- upload-labs-env文件上传漏洞 11-19关
Pass-11 源码:加上了本人的注释=.= $is_upload = false; $msg = null; if(isset($_POST['submit'])){ $ext_arr = arra ...
- 对S7通信的连接的理解以及对比CAN通信协议来理解PLC通讯
对S7通信的连接的理解以及对比CAN通信协议来理解PLC通讯. 对功能块 SFB12 和 SFB13 的R_ID参数的理解 ? 对于同一个数据包.发送方与接收方的R_ID应该相同. 用下图解释 双向连 ...
- word2010文档如何隐藏右侧灰色空白不可编辑区域
word2010文档如何隐藏右侧灰色空白不可编辑区域, (word2007也是差不多的操作) 两种方法: 1.点击图中的“最终状态”按钮: 2.点击图中的”以嵌入方式显示所有修订“的按钮:
- Oracle删除重复数据并且只留其中一条数据
数据库操作中,经常会因为导数据造成数据重复,需要进行数据清理,去掉冗余的数据,只保留正确的数据 一:重复数据根据单个字段进行判断 1.首先,查询表中多余的数据,由关键字段(name)来查询. sele ...
- css的响应式布局和动画
把响应式布局和动画放在一起写是因为他们有个共同点@符号 先讲讲响应式布局@media 响应式布局==曾经==非常的流行,这种布局方式可以做出一也兼容一切设备的页面,但是当页面的功能越来越多,css文件 ...