当前位置: 首页 > news >正文

BFS模板:844. 走迷宫

给定一个 n×mn×m 的二维整数数组,用来表示一个迷宫,数组中只包含 00 或 11,其中 00 表示可以走的路,11 表示不可通过的墙壁。

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

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

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

输入格式

第一行包含两个整数 nn 和 mm。

接下来 nn 行,每行包含 mm 个整数(00 或 11),表示完整的二维数组迷宫。

输出格式

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

数据范围

1≤n,m≤1001≤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

思路

1.宽度优先搜索:和深度优先搜索有区别,深度优先搜索是选择一条路径走到尽头,然后再回溯,宽度优先搜索是类似于一圈一圈往外寻找可能的路径,然后寻找到一条最短路径

2.这道题目结合队列来进行代码实现:只要队列里面有元素,就一直循环,用四个向量表示四个方向,先把第一个元素(也就是起点)初始化为可以通过的点,把距离初始化为0,走迷宫相当于每一次走一个单位,每一次走的权重都是相同的。根据题意,地图里面是0可以通过,是1就不可以通过,距离的二维数组在最开始的时候就被初始化为了-1,每一个坐标都是-1,只要某一次使用了那个坐标,那个坐标所对应的距离就不再是-1,就不可以再被使用了,这样子就可以保证我们寻找到的是最短路径,只要有一条路径走到了终点,终点坐标对应的距离就不再是-1,不能被使用,也就是说其他路径永远走不到终点

3.我们最后返回终点到起点的距离即可

代码

#include<iostream>
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std;const int N=110;
typedef pair<int,int> PII;
int n,m;
int g[N][N],d[N][N];int bfs()
{queue<PII> q;memset(d,-1,sizeof d);d[0][0]=0;q.push({0,0});while(q.size()){auto t=q.front();q.pop();int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};for(int i=0;i<4;i++){int 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()
{scanf("%d%d",&n,&m);for(int i=0;i<n;i++)for(int j=0;j<m;j++)scanf("%d",&g[i][j]);printf("%d\n",bfs());return 0;
}

 

http://www.lryc.cn/news/183386.html

相关文章:

  • re学习(37)DASCTF 2023 0X401七月暑期挑战赛 controflow
  • 数字IC前端学习笔记:数字乘法器的优化设计(进位保留乘法器)
  • prority_queue的学习
  • 【vue3】toRef与toRefs的使用,toRef与ref的区别
  • 信息论基础第二章部分习题
  • 信息化发展73
  • 560. 和为 K 的子数组
  • 24 mysql all 查询
  • 【Excel单元格数值统计】python实现-附ChatGPT解析
  • 爬虫项目实战——爬取B站视频
  • 关掉在vscode使用copilot时的提示音
  • 【有限域除法】二元多项式除法电路原理及C语言实现
  • RabbitMQ核心总结
  • Unicode与UTF-8
  • A : DS单链表--类实现
  • React Hooks —— ref hooks
  • 泛型与Gson解析
  • c++使用ifstream和ofstream报错:不允许使用不完整的类型
  • 调试器通用波形显示工具
  • Linux中getopt函数、optind等变量使用详解
  • RDP协议流程详解(二)Basic Settings Exchange 阶段
  • 实时人脸五观检测:基于libfacedetection(CNN模型)
  • 图像和视频上传平台Share Me
  • JavaScript 在前端开发中有什么应用?
  • 【沐风老师】推荐2023年3DMAX的10个最佳插件!
  • 【visual studio 小技巧】项目属性->生成->事件
  • 每日一题 279完全平方数(完全背包)
  • 创意中秋与国庆贺卡 - 用代码为节日增添喜悦
  • 专业综合课程设计 - 优阅书城项目(第一版)
  • 【剑指Offer】13.机器人的运动范围