给定一个 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

#include<bits/stdc++.h>
using namespace std;
const int N = 110;
int d[N][N], g[N][N];
typedef pair<int, int> PII;
int m, n;int bfs()
{PII pre[N][N];queue<PII> q;memset(d, -1, sizeof d);d[0][0] = 0;int dx[] = {0, 1, 0, -1};int dy[] = {-1, 0, 1, 0};q.push({0, 0});while(q.size()) {auto t = q.front();q.pop();for(int i=0; i<4; i++) {int x = t.first + dx[i];int 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});pre[x][y] = t; ///记录路径}}}// //输出路径// int a = n-1, b = m-1;// while(a || b) {//     cout << a << ' ' << b << endl;//     auto t = pre[a][b];//     a = t.first,b = t.second;// }return d[n-1][m-1];
}int main()
{cin >> n >> m;for(int i=0; i<n; i++)for(int j=0; j<m; j++)cin >> g[i][j];int res = bfs();cout << res << endl;return 0;
}
#include<bits/stdc++.h>
using namespace std;
int n, m;
const int N = 110;
int g[N][N];
bool vis[N][N];
int x[] = {0, 1, 0, -1};
int y[] = {1, 0, -1, 0};//上 左 下  右
int res;
queue<pair<pair<int, int>, int>> q;int bfs()
{while(!q.empty()) {auto t = q.front();q.pop();int a = t.first.first;int b = t.first.second;int k = t.second;for(int i=0; i<4; i++) {//到达出口if(a + x[i] == n && b + y[i] == m) return k+1;//能走else if(g[a+x[i]][b+y[i]] != 1 && !vis[a+x[i]][b+y[i]]) {q.push({{a+x[i], b+y[i]}, k+1});vis[a+x[i]][b+y[i]] = true;}}}
}int main()
{cin >> n >> m;fill(g[0], g[0]+N*N, 1);for(int i=1; i<=n; i++) {for(int j=1; j<=m; j++) {cin >> g[i][j];}}q.push({{1, 1}, 0});vis[1][1] = true;res = bfs();cout << res << endl;return 0;
}

844. 走迷宫 + BFS相关推荐

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

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

  2. Acwing.844 走迷宫(BFS)

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

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

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

  4. [AcWing]844. 走迷宫(C++实现)bfs的思想

    [AcWing]844. 走迷宫(C++实现)模板题 1. 题目 2. 读题(需要重点注意的东西) 3. 解法 4. 可能有帮助的前置习题 5. 所用到的数据结构与算法思想 6. 总结 1. 题目 2 ...

  5. acwing——844. 走迷宫

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

  6. AcWing 844. 走迷宫

    原题链接如下: AcWing 844. 走迷宫 题目如下: 给定一个 n×m 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0 表示可以走的路,1 表示不可通过的墙壁. 最初,有一 ...

  7. AcWing 844.走迷宫

    844. 走迷宫 - AcWing题库 就是要我们求最短路,可以用bfs. 那么这题目,如果用dfs会有什么情况. bfs用队列实现,对于为何用队列实现.可以看一下这篇文章[图解算法]BFS 为什么需 ...

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

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

  9. 蓝桥杯 python 走迷宫 BFS

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

最新文章

  1. UVA11384 Help is needed for Dexter (规律、思维)
  2. java绘等高线图_Matplotlib中的极坐标等高线图
  3. SWOOLE httpserver
  4. 如何让json_encode不转义斜杠
  5. python多行语句用反斜杠_抗联部队规定新战士每年必须学会多少个生字
  6. eclipse常用快捷键——非常实用
  7. 从零开始学python项目_从零开始可以这样学python
  8. 随想录(中断中真的不能上下文切换吗)
  9. 目标检测java系统_5分钟!用Java实现目标检测
  10. Spring MVC 中使用AOP 进行统一日志管理--XML配置实现
  11. MR Shuffle流程 入门
  12. 怎么用Excel来批量生成SQL语句
  13. 上网时间监控软件_网管软件有哪一些?哪家好?
  14. 从雷声谈云层中的电能
  15. C# C++ 共享内存 结构体读写 结构体中嵌套结构体 结构体中带string Char*的处理方式
  16. ERD-ONLINE 免费在线数据库建模工具
  17. 传统的方式写mybatis的应用程序
  18. 2020-04-10盘后总结,缩量下跌,成交量低迷
  19. 如何快速合并PDF文件?几个方法教你合并PDF
  20. [28期] 精力有限,精神信念的力量是无限的.....

热门文章

  1. linux flock 命令安装,在Linux上使用flock命令控制程序的异步执行
  2. 《构建之法》第4.17章读书笔记
  3. wordpress框架图片上传
  4. Hough变换直线检测
  5. CNCERT发布通报:大量家用路由器DNS遭黑客篡改
  6. Unity对H5小游戏开发的支持——Project Tiny
  7. The 2021 CCPC Weihai Onsite J. Circular Billiard Table
  8. Apache 开启和关闭 Keep-Alive 解决访问长连接问题
  9. 苹果怎么开启开发者模式
  10. 二三类户开户风险和交易风险再讲