3752:走迷宫

总时间限制: 1000ms 内存限制: 65536kB
描述
一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走;有的格子是空地,可以走。
给定一个迷宫,求从左上角走到右下角最少需要走多少步(数据保证一定能走到)。只能在水平方向或垂直方向走,不能斜着走。
输入
第一行是两个整数,R和C,代表迷宫的长和宽。( 1<= R,C <= 40)
接下来是R行,每行C个字符,代表整个迷宫。
空地格子用’.‘表示,有障碍物的格子用’#‘表示。
迷宫左上角和右下角都是’.’。
输出
输出从左上角走到右下角至少要经过多少步(即至少要经过多少个空地格子)。计算步数要包括起点和终点。
样例输入
5 5
…###
#…
#.#.#
#.#.#
#.#…
样例输出
9

问题链接:Bailian3752 走迷宫
问题简述:(略)
问题分析:最短路径问题,用BFS来解决。
程序说明:(略)
参考链接:(略)
题记:(略)

AC的C++语言程序如下:

/* Bailian3752 走迷宫 */#include <iostream>
#include <queue>
#include <cstdio>
#include <cstring>#define RC 45using namespace std;const int dr[] = {-1, 1, 0, 0};
const int dc[] = {0, 0, 1, -1};
int r, c;
char b[RC][RC +1], vis[RC][RC];
struct Node {int r, c, step;
};int bfs(int u, int v)
{Node t = {u, v, 1};vis[u][v] = 1;queue<Node> q;q.push(t);while (!q.empty()) {t = q.front();q.pop();for (int i = 0; i < 4; i++) {int nextr = t.r + dr[i];int nextc = t.c + dc[i];if (nextr < 0 || nextr >= r || nextc < 0 || nextc >= c || vis[nextr][nextc] || b[nextr][nextc] != '.')continue;if (nextr == r - 1 && nextc == c - 1)return t.step + 1;vis[nextr][nextc] = 1;q.push({nextr, nextc, t.step + 1});}}return -1;
}int main()
{scanf("%d%d", &r, &c);for (int i = 0; i < r; i++)scanf("%s", b[i]);memset(vis, 0, sizeof(vis));printf("%d\n", bfs(0, 0));return 0;
}

Bailian3752 走迷宫【BFS】相关推荐

  1. 【动态规划】机器人走迷宫-BFS

    机器人走迷宫-BFS 题目描述:给一个矩阵,0代表可走位置,1代表障碍物 给定起点和终点和行走规则(上.下.左.右),输出最短路径 探寻最短路径-BFS 首先定义两个辅助函数,valid_action ...

  2. 蓝桥杯 python 走迷宫 BFS

    蓝桥杯 python 走迷宫 BFS 题目描述 给定一个 N × × × M 的网格迷宫 G.GG的每个格子要么是道路,要么是障碍物(道路用 1 表示,障碍物用 0 表示). 已知迷宫的入口位置为 ( ...

  3. DFS和BFS概念及实践+acwing 842 排列数字(dfs) +acwing 844. 走迷宫(bfs)

    DFS (深搜), 也有说就是递归的 执着: 一直搜到底,然后回溯下一个节点 数据结构 : stack (这里的栈,实际上是编译器内部的栈, 所以说也可以看成递归, 递归内部也是调用编译器内部栈) 空 ...

  4. Acwing---844. 走迷宫——BFS

    走迷宫 1.题目 2.基本思想 3.代码实现 1.题目 给定一个 n×m 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0 表示 可以走的路,1 表示不可通过的墙壁.最初,有一个人 ...

  5. 844. 走迷宫 + BFS

    给定一个 n×m 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0 表示可以走的路,1 表示不可通过的墙壁. 最初,有一个人位于左上角 (1,1) 处,已知该人每次可以向上.下.左 ...

  6. Acwing.844 走迷宫(BFS)

    题目 给定一个n'm的二维整数数组,用来表示一个迷宫,数组中只包含0或1,其中0表示可以走的路,1表示不可通过的墙壁. 最初,有一个人位于左上角(1,1)处,已知该人每次可以向上.下.左.右任意一个方 ...

  7. acwing算法基础课 844. 走迷宫

    acwing 844. 走迷宫(bfs模板题) 传送门 题目大意:给你一个n * m的矩阵问你从左上角走到右下角最小需要几步,输出步数,其中矩阵里面只包含0和1两个数字,0表示可以走,1表示有障碍 思 ...

  8. 走迷宫-双向bfs解法

    双向bfs适用于知道起点和终点的状态下使用,从起点和终点两个方向开始进行搜索,可以非常大的提高单个bfs的搜索效率 同样,实现也是通过队列的方式,可以设置两个队列,一个队列保存从起点开始搜索的状态,另 ...

  9. 【含泪总结】大胖子走迷宫(bfs+读懂题意)

    2548. 大胖子走迷宫 小明是个大胖子,或者说是个大大胖子,如果说正常人占用 1×1 的面积,小明要占用 5×5 的面积. 由于小明太胖了,所以他行动起来很不方便. 当玩一些游戏时,小明相比小伙伴就 ...

最新文章

  1. python expect模块_成为顶级黑客--python绝技 阅读笔记(五)
  2. php is resource,PHP有没有is_type()函数?该如何解决 - is_resource
  3. utm虚拟机安装linux,UTM: 在 iOS 上安装 Windows 或 Linux 等系统及虚机安装过程
  4. Java垃圾收集器:G1GC何时将CMS强制退出?
  5. 计算机技术与自动化期刊官网,计算技术与自动化是什么级别
  6. BugkuCTF-Crypto题散乱的密文
  7. 大数据时代:数据质量逐渐成关注焦点
  8. Data Pump failed with ORA-04031/ORA-4030?
  9. 那是我夕阳下的奔跑--一个萌新的觉醒
  10. 解决setInterval计时器不准的问题
  11. C++中对string对象的初始化及赋值方式总结
  12. 二本软件工程学生的考研逆袭之路
  13. html初始化调用js函数
  14. 阿帕奇apache-apollo-1.7.1-windows-distro
  15. 双远心镜头原理及选型方法(二)
  16. 【Unity3D-Mirror多人坦克大战】子弹及其开火位置的生成、子弹开火逻辑(四)
  17. python实现自动关机
  18. 【网上教学】实现线上签到和收批作业的方法
  19. Let‘s Go Rust 系列之定时器 Ticker Timer
  20. 浏览器端转盘抽奖策略实现

热门文章

  1. 我被男朋友整整欺骗了两年可结果却让我感动!
  2. 2019pythonqq机器人_基于Python来开发一个QQ机器人, 原来这么简单!
  3. 使用MTL库求解矩阵特征值和特征向量
  4. JVM的7种垃圾收集器
  5. springboot整合ssm(mybatis)
  6. AcheGesture-开源免费的手势框架
  7. Windows上配置iPhone开发环境
  8. rust能捏人不_不跟风出游的五一假期,武汉人到底能去哪
  9. java中的jni_JAVA中JNI的简单使用
  10. 2d shader unity 阴影_【Unity Shader】平面阴影(Planar Shadow)