题目描述:

给定一个 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>
#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define int long long
#define endl '\n'
#define N  105
using namespace std;
const int inf=0x3f3f3f3f;
const double ex=1e-7;
const int mod=1e9+7;
int gcd(int a ,int b){ return b ? gcd(b,a%b) : a ;}
typedef pair<int,int>PII;//坐标点
int g[N][N],v[N][N];//初始图、点到起点的距离
PII pre[N][N];//每个点的前一个点
vector<PII>path;//路径
int n,m;
void bfs()
{queue<PII>q;memset(v,-1,sizeof(v));//到起点的距离初始为-1而不是0,方便区分是否已经走过q.push({1,1});//从起点开始搜索v[1][1]=0;//起点到起点的距离为0int dx[4]={0,0,-1,1},dy[4]={1,-1,0,0};//上下左右四个方向扩展while(q.size())//如果在此循环中未达到到终点则无解{PII t=q.front();//记录当前对头,即前一个点q.pop(); //将当前出队for(int i=0;i<4;i++){int x1=t.first+dx[i],y1=t.second+dy[i];//上下左右试探是否能前进if(x1>=1&&x1<=n&&y1>=1&&y1<=m&&!g[x1][y1]&&v[x1][y1]==-1) //是否在地图内,是否可以前进,是否已经有路径{v[x1][y1]=v[t.first][t.second]+1; //新点的距离为旧点距离+1pre[x1][y1]=t; //记录新点的前一点q.push({x1,y1}); //新点入队尾}}}//从终点出发回溯到起点/*  int x=n,y=m;//该题未要求输出路径但需掌握while(x||y){path.push_back({x,y});PII t=pre[x][y];x=t.first,y=t.second;}reverse(path.begin(),path.end());  //路径逆转,起点在前,终点在后for(auto it :path ){cout <<it.first<<" "<<it.second<<endl;}*/cout <<v[n][m];//输出起点到终点的最短路径长度
}
signed main()
{ioscin >>n>>m;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin >>g[i][j];}}bfs();return 0;
}

AcWing 844. 走迷宫(迷宫问题+最短路径+BFS+最短路径输出)相关推荐

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

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

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

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

  3. acwing——844. 走迷宫

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

  4. AcWing 844. 走迷宫

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

  5. AcWing 844.走迷宫

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

  6. Acwing.844 走迷宫(BFS)

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

  7. AcWing 844. 走迷宫(BFS or DP)

    题目链接 https://www.acwing.com/problem/content/description/846/ 思路 直接用BFS跑一个最短路就好了,因为边权都是为1的,并且每次只有四个方向 ...

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

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

  9. 信息学奥赛一本通 1254:走出迷宫 | OpenJudge NOI 2.5 6264:走出迷宫

    [题目链接] ybt 1254:走出迷宫 OpenJudge NOI 2.5 6264:走出迷宫 [题目考点] 1. 广搜 迷宫问题 [解题思路] 广搜,迷宫问题模板题. 当数据量很小时,用深搜的方法 ...

最新文章

  1. 使用Gradle整合SpringBoot+Vue.js-开发调试与打包
  2. nginx lua 安装spdy
  3. [原]iOS中 Web 页面与 Native Code 的一种通信方式
  4. 编程之美2.1 求二进制中1的个数
  5. 用最少的机器支撑万亿级访问,微博6年Redis优化历程
  6. mysql在线检测失败_一则线上MySql连接异常的排查过程
  7. CSS基础必备知识点03
  8. window.parent与window.opener的区别与使用
  9. 音视频同步原理[ffmpeg]
  10. teechart绘制实时曲线_关于PIII曲线
  11. Bailian4137 最小新整数【Ad Hoc】
  12. 专升本英语作文信件类必背范文十篇
  13. pc端移动端布局有什么区别
  14. PhotoShop软件笔记
  15. 推荐给大家12款好用的电脑软件
  16. windows10 下 Haskell 环境搭建2020
  17. PP实施经验分享(24)——ECN应用及系统操作
  18. ahk写入excel单元格_输出excel数据到GUI 获取excel所有Sheet及字段 Autohotkey
  19. 斐波那契数列——兔子生兔子问题
  20. Google60款开源项目

热门文章

  1. 酷!一个仿漫画手绘风格的 Python 图表库
  2. 西方心理学对学习的研究和认识
  3. (附源码)计算机毕业设计SSM基于Java的图书馆座位预约系统
  4. 多地政府提及元宇宙发展 | 产业区块链发展周报
  5. golang及beego框架单元测试小结
  6. 渗压计工作原理及基准值确定方法
  7. Spark的数据存储目录HDFS
  8. 2018中国大学生程序设计竞赛 - 网络选拔赛
  9. 随笔之看雷军视频有感//2021-2-24
  10. 非静压模型NHWAVE学习(7)——波浪变形模拟算例学习(Wave transformation over an elliptical shoal)