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. linux 邮件中继转发,linux – 如何使sendmail中继本地邮件?
  2. mysql 连接校对_教你轻松的掌握 MYSQL连接字符集和校对
  3. python django model关联另一个实体类
  4. 【C语言练习】将100~200之间的素数输出
  5. python 多线程入门试验
  6. HTML5系列:HTML5与HTML4的区别
  7. hashmap java_Java – HashMap详细说明
  8. 使用SqlCommandBuilder
  9. js常用的2中排序方法:冒泡排序和快速排序
  10. 06 使用VS2012开发简单控制器程序 1214
  11. java取set中的元素个数_java中的Set的使用以及各种遍历方法(较为全面)
  12. 如何给小朋友解释单摆运动_运维挑战:如何构建复杂环境下的适应性系统
  13. 如何用 Nginx 禁止国外 IP 访问网站 ?
  14. epson r1900 清零软件_EPSON 1430 R1900 1500 R330 R1800 R2000 R230 打印机清零软件
  15. 科技云报道:深信服桌面云,“大”不一样
  16. 【图像分割】基于马尔可夫随机场实现图像分割附matlab代码
  17. 嵌入式Linux系统的指纹识别,嵌入式指纹识别系统设计
  18. 用R语言对网络数据进行统计分析(四)
  19. java怎么编程class,深入理解Java Class文件格式(一)
  20. 2020年985大学计算机分数线,2020年985大学名单分数线

热门文章

  1. delphi开发回忆录——面向对象的基础,继承
  2. 状态模式(Strategy Pattern)
  3. 注册app短信验证平台_怎样挑选网站验证码短信平台?
  4. dojo中chart参数
  5. 使用CSS 媒体查询功能满足不同屏幕分辨率要求
  6. Android中ListView数据处理优化
  7. 轻松实现一个操作ini文件的类
  8. 老挑毛 win7 linux,图解老挑毛u盘启动工具怎么重装系统
  9. c语言中状态机的作用,C语言中的状态机
  10. Ecology 建模表单 数据库字段与页面字段对应关系显示