题目链接

题目

学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗。但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二维的格子迷宫,要进城堡必须得先通过迷宫。因为班长还有妹子要陪,磨刀不误砍柴功,他为了节约时间,从线人那里搞到了迷宫的地图,准备提前计算最短的路线。可是他现在正向妹子解释这件事情,于是就委托你帮他找一条最短的路线。

输入

第一行两个整数 n,m 为迷宫的长宽。
接下来n行,每行 m 个数,数之间没有间隔,为0或1中的一个。
0 表示这个格子可以通过,1 表示不可以。

假设你现在已经在迷宫坐标(1,1)的地方,即左上角,迷宫的出口在(n, m)。
每次移动时只能向上下左右 4 个方向移动到另外一个可以通过的格子里,每次移动算一步。
数据保证(1, 1),(n, m)可以通过。(0<m, n<=50)

输出

第一行一个数为需要的最少步数 K。
第二行 K 个字符,每个字符 ∈{U, D, L, R},分别表示上下左右。
如果有多条长度相同的最短路径,选择在此表示方法下字典序最小的一个。

样例输入

3 3
001
100
110

样例输出

4
RDRD

解题思路

  • 首先用一个二位数组储存地图信息;
  • 其次用一个二位数组来储存对应位点的行动方向;
  • 之后使用双端队列容器来进行广搜操作,即:
    • 将第一个为点 (1, 1) 入队;
    • 弹出队首元素,判断“下左右上”(因为多条最短路要输出字典序最靠前的一种情况,因此在判断时直接按字典序依次判断 “DLRU”),将能走的位点(即不为“1”)存进队列,并将存入位点的地图由 “0” 更新为 “1” 使其不能再次行走;
    • 继续弹出队首进行下一轮判断,直到存入终点 (n, m) 时停止判断开始回溯查看行动情况;
  • 输出结果。

代码

注视很清晰哈

#include <iostream>
#include <cstring>
#include <cstdio>
#include <deque>
#include <stack>#define S 1<<10using namespace std;/** 储存位点信息 **/
struct step
{int x;int y;int t;
};/** 行数和列数的变量 **/
int n, m;/** 往 下左右上 走的坐标和对应字母的存储 **/
int cx[4] = { 1,  0,  0, -1};
int cy[4] = { 0, -1,  1,  0};
char to[4] = {'D', 'L', 'R', 'U'};/** pot - 储存地图数据;way - 储存行动数据 **/
int pot[S][S];
int way[S][S];/** 广搜队列,储存可能的行动路线 **/
deque<step> r;void fd()
{/** 先将首位进入队列,并更新首位的地图为“1” **/step a;a.x = a.y = 1;a.t = 0;r.push_back(a);pot[a.x][a.y] = 1;/** 读取队首,然后讲周围能走的空位入队 **/while (!r.empty()){a = r.front();r.pop_front();for (int i=0; i<4; i++){step b;b.x = a.x + cx[i];b.y = a.y + cy[i];b.t = a.t + 1;if (!pot[b.x][b.y]){r.push_back(b);pot[b.x][b.y] = 1;way[b.x][b.y] = i;}/** 如果遇到出口位点则回溯查看路径 **/if (b.x==n && b.y==m){stack<char> w;cout << b.t << endl;while (b.x!=1 || b.y!=1){int tw = way[b.x][b.y];w.push(to[tw]);b.x -= cx[tw];b.y -= cy[tw];}while (!w.empty()) cout << w.top(), w.pop();cout << endl;/** 注意这里一定要 return 不然会继续循环直到 r 为空 **//** 可能会会导致答案错误 **/return ;}}}}int main()
{/** 将地图所有位点置为 “1”  **//** 既能初始化地图,又能防止判断路线出界  **/memset(pot, 1, sizeof(pot));/** 输入地图的行数和列数 **/cin >> n >> m;/** 输入地图,使用 %1d 直接获取一个整数字符,方便判断和处理 **/for (int i=1; i<=n; i++) for (int j=1; j<=m; j++)scanf("%1d", &pot[i][j]);/** 寻找路径 **/fd();return 0;
}

学霸的迷宫 - 广搜例题相关推荐

  1. 蓝桥杯-学霸的迷宫-广搜-java

    算法提高 学霸的迷宫   时间限制:1.0s   内存限制:256.0MB 问题描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在一个城堡里,城堡外面 ...

  2. 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 ...

  3. BFS广搜例题,问题引入 --- 阿狗荒岛逃生系列(其一)

    该例题来自我的学长,感谢学长们对我的带领: 例题简述: 代码及详细注释: #include<bits/stdc++.h> using namespace std; struct Node{ ...

  4. HDU ACM 1728 逃离迷宫 (广搜BFS)

    http://acm.hdu.edu.cn/showproblem.php?pid=1728 题意:给出一张图,转弯数k,起点(x1,y1),(x2,y2)判断能不能最多只转k个弯时从起点走到终点 输 ...

  5. 深搜DFS\广搜BFS 图初步入门

    首先,不管是BFS还是DFS,由于时间和空间的局限性,它们只能解决数据量比较小的问题. 深搜,顾名思义,它从某个状态开始,不断的转移状态,直到无法转移,然后退回到上一步的状态,继续转移到其他状态,不断 ...

  6. 双向广搜-HDU1401 Solitaire

    文章目录 双向广搜 例题 题意 分析 代码 小结 双向广搜 什么是双向广搜? 如果把bfs想象成在平静的池塘丢一颗石头,激起的波浪一层层扩散到整个空间直到到达目标,就得到起点到终点的最优路径.那么双向 ...

  7. python【蓝桥杯vip练习题库】ADV-147学霸的迷宫(广搜 bfs经典问题)

    试题 算法提高 学霸的迷宫 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在一个城堡里, ...

  8. 学霸的迷宫 ----最短路径---广搜

    学霸的迷宫   时间限制:1.0s   内存限制:256.0MB      问题描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在一个城堡里,城堡外面 ...

  9. BFS广搜解决迷宫问题java实现

    目录 1.例题 题目描述 输入 输出 测试数据 2. 思路分析 基本思想 具体步骤 代码实现 3.BFS小结 求解思路: 注意 1.例题 题目描述 迷宫由 n 行 m 列的单元格组成,每个单元格要么是 ...

  10. 【搜索-广搜】 迷宫的最短路径

    题目: 给定一个大小为N*M的迷宫,由通道('.')和墙壁('#')组成,其中通道S表示起点,通道G表示终点,每一步移动可以达到上下左右中不是墙壁的位置.试求出起点到终点的最小步数.(本题假定迷宫是有 ...

最新文章

  1. ATS 6.2.1中缓存文件过期并不回源校验的“坑”
  2. jenkins+maven+Tomcat+shell构建自动化部署
  3. RTMP 流媒体系统协议 简介
  4. 2015年百度二面试题
  5. endnotex9如何导入caj中文文献_EndNote系列教程(二)——数据库的建立及文献的筛选...
  6. PIE SDK剔除栅格块算法
  7. python将dataframe写入csv_Pandas dataframe数据写入文件和数据库
  8. 02-线性结构1 两个有序链表序列的合并 (15 分)
  9. Opencv 图片缩小尺寸原理
  10. MySQL两个字段都建立索引 使用情况
  11. django3安装rest_framework,并测试
  12. 神经网络中常用激活函数总结【Python实现激活函数与导函数,曲线可视化分析】
  13. this version of the Java Runtime only recognizes class file versions up to 52.0
  14. 新浪微博数据采集以及分析方法(干货)
  15. Redis-配置文件
  16. Python自动化测试进阶系列——自动发邮件功能
  17. Servlet学习笔记
  18. mc洪磊-2012经典语言大合集 音乐无处不在 老婆无人替代 好听音乐 就用酷狗
  19. mybatis-generator工具生成对应的自定Service和Controller
  20. 群晖nas免费内网穿透,实现外网异地远程访问

热门文章

  1. Shell脚本变量学习_02
  2. 人的一生,到底在追求什么呢?
  3. Qt 实现画线笔锋效果详细原理
  4. Jetpack Compose - CircularProgressIndicator、LinearProgressIndicator
  5. android 9.0 10.0 Launcher3修改workspace字体颜色
  6. 键盘调节台式计算机声音,台式电脑如何用键盘控制声音开关
  7. 想改变Facebook? 先改变扎克伯格!
  8. 基于机器学习和深度学习的图数据异常检测综述
  9. slt mysql_SAP SLT操作手册 PDF 下载
  10. Material101-Lec13-18 Rian Shader