在DFS那一章我们也提到过了,
AcWing 844. 走迷宫
给定一个n*m的二维整数数组,用来表示一个迷宫,数组中只包含0或1,其中0表示可以走的路,1表示不可通过的墙壁。

最初,有一个人位于左上角(1, 1)处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。

请问,该人从左上角移动至右下角(n, m)处,至少需要移动多少次。

数据保证(1, 1)处和(n, m)处的数字为0,且一定至少存在一条通路。

输入格式

第一行包含两个整数n和m。

接下来n行,每行包含m个整数(0或1),表示完整的二维数组迷宫。

输出格式

输出一个整数,表示从左上角移动至右下角的最少移动次数。

数据范围

1≤n,m≤100
样例
输入样例:
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
输出样例:
8

AC代码:

#include <bits/stdc++.h>
using namespace std;
const int N = 300;
typedef pair<int, int> PII;
queue<PII> q;
int n, m, g[N][N], d[N][N];
int bfs()
{memset(d, -1, sizeof d);d[0][0] = 0;q.push({0, 0});int dx[4] = {1, 0, -1, 0};int dy[4] = {0, 1, 0, -1};while(!q.empty()){PII t = q.front();q.pop();int x, y;for(int i = 0; i < 4; i++){x = t.first + dx[i];y = t.second + dy[i];if(x >= 0 && x < n && y >= 0 && y < m && g[x][y] == 0 && d[x][y] == -1){d[x][y] = d[t.first][t.second] + 1;q.push({x, y});}}}return d[n - 1][m - 1];
}
int main()
{ios::sync_with_stdio(false);cin.tie(0);cin >> n >> m;for(int i = 0; i < n; i++)for(int j = 0; j < m; j++){cin >> g[i][j];}cout << bfs() << '\n';return 0;
}

核心思想和注意点

  • 用队列的“先进先出”思想,来进行BFS
  • dx和dy模拟上下左右走一步
  • memset按字节存,速度快,但有限制,平时一般都用-1和0,无穷大用0x3f,无穷小用0x8f。

BFS(广度优先搜素,附例题)相关推荐

  1. 《编译原理》求短语,直接短语,句柄,素短语,最左素短语 - 例题解析

    <编译原理>求短语,直接短语,句柄,素短语,最左素短语 - 例题解析 笔记 (一)明确概念: 名称 概念 短语 定义: 若 S 为文法 G 的开始符号,αβδ 是该文法的一个句型,即 S ...

  2. 分治算法小结(附例题详解)

    分治算法小结(附例题详解) 我的理解: 分治算法我的理解就是看人下菜碟,我们要解决的问题就好像一群人构成的集体,要我们解决这个问题,那我们就要满足这群人里面每个人不同的需求,也就是写出解决的代码,把每 ...

  3. 动态规划类问题解题步骤 --附例题(小偷问题)

    动态规划类问题解题步骤 --附例题(小偷问题) 动态规划 基本思想 适用情况 优点 解题步骤 实例分析 问题 解题步骤 动态规划 基本思想 动态规划背后的基本思想非常简单.大致上,若要解一个给定问题, ...

  4. 数学规划详解(附例题及部分Python实现)

    数学规划详解(附例题及Python实现) 例题来自于清风老师的数学建模课,个人认为讲的非常好,欢迎大家购买 一.概述 1.1 定义 数学规划是运筹学的一个分支,在约束条件下,按照目标函数来寻求计划管理 ...

  5. 算法之深度优先搜素(DFS)和广度优先搜素(BFS)

    深度优先搜素(DFS):如果当前节点有孩子,遍历当前孩子的孩子再遍历兄弟节点的孩子(一条路走到头再回来走另一条). **HTML 代码** <div class="root" ...

  6. [dsu on tree]树上启发式合并总结(算法思想及模板附例题练习)

    文章目录 前言 树上启发式合并 引入 算法思想 时间复杂度 模板 练习 例题:CF600E Lomsat gelral solution code CF208E Blood Cousins solut ...

  7. 二分图匹配 Hopcroft-Carp (HK) 算法详解 附例题

    了解这个算法之前 首先了解一个概念 :增广路 增广路 :简单的说 ,是二分图匹配中的一条边,他总是从 左边集合的一个点出发通过一条没有被匹配的边连接到右边集合,再从该点通过一条 匹配过的边连接到右边集 ...

  8. 【数学建模】灰色预测模型GM(1,1)附例题分析(MATLAB实现)

    目录 一.灰色预测概述 1.灰色系统.白色系统和黑色系统 2.灰色系统与其它学科的比较 3.灰色预测分类及特点 二.灰色预测模型GM(1,1) 1.几个理论 1.1 累加生成数(1-AGO) 1.2 ...

  9. python【数据结构与算法】树状数组(附例题)

    文章目录 1 概述 2 单点查询 3 区间修改 4 例题 1 概述 首先引入差分数组d,设原数组为a,令d[i]=a[i]-a[i-1].由此关系式得 也就是a[j]等于d[j]的前 j 项和,即前缀 ...

  10. python【数据结构与算法】01背包问题(附例题)

    文章目录 1 定义 2 例题 3 压缩 1 定义 题目 有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使价值总和最大. 基本思路 这是最基础的背包 ...

最新文章

  1. 传递函数极点与微分方程的解
  2. mysql删除了密码怎样恢复_window 下如何恢复被删除的mysql root账户及密码(mysql 8.0.17)...
  3. 第2本书:CCIE Practical Studies, Volume II-第5天
  4. 《魔鸟》:上帝可以宽恕,魔鬼却一个都不放过
  5. php $key{$x},Thinkphp 3.x key可控注入(?)
  6. scala基础之隐式转换
  7. Android 系统性能优化(78)---如何优化您的 Android 应用 (Go 版)
  8. java mysql查询语句_Mysql查询语句执行过程
  9. Web App - MUI框架初体验
  10. 我国首个5G地铁站开通:TCL集团重组方案通过;苹果2019新品图泄露|雷锋早报...
  11. mysql8只有ibd文件_只有ibd文件还能恢复数据吗
  12. gsoap 的好网站 http://www.cs.fsu.edu/~engelen/soapexamples.html
  13. 帮我起个名字,带淇,两个字的
  14. 【哈利波特全集】哈利波特1-7
  15. 企业实施WMS仓储管理系统需要规避哪些风险
  16. html网页的框架标记分别有,新手入门前端,应该知道HTML框架排版标记标签大全...
  17. tortoise冲突处理
  18. 中介房屋买卖合同及违约责任
  19. c语言一球从100米高度自由落下 每次落地返回,C语言编程 经典例题一百道 20 一球从100米的高度自由落下,每次落地返回原高度的一半再落下,求它在第10次落地,共经过多少米?第10反弹多高。...
  20. banq修复_banq手机u盘怎么用u盘视频文件有锁

热门文章

  1. ThreadPoolExecutor 的三种提交任务方式
  2. AES算法,DES算法,RSA算法JAVA实现
  3. 改变浏览器窗口的大小和位置
  4. 一分钟了解阿里云产品:安全产品评测:阿里云盾安全威胁情报“态势感知”...
  5. Java 异常类层次结构
  6. Javascript从零开始学习第一天
  7. JS 用window.open()函数详解
  8. sdut 1465 公共因子
  9. 随风潜入夜,润物细无声
  10. JS易混淆的方法整理