矩阵的广度优先遍历之—走迷宫

本文介绍了在一次面试中遇到的算法题——使用广度优先遍历来解决0-1二维矩阵的迷宫问题。通过将1表示的可通行路径标记为字母,并展示广度优先遍历的前三步,阐述了如何找到从起点到终点的最短步数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前两天去头条面了一波算法,面试官一点都不瞎比比,直接上来先做算法题。因为没和面试官沟通好,栽到这道题上了,分享如下:

 

给定0-1二维矩阵(迷宫)。所有点都和其上下左右点联通,1表示允许走的格子,0表示不能走。设从左/上边缘一个固定点(不为0)出发,走出这个迷宫(到达右/下边缘)的最小步数为step,返回step的最小值。

【分析】

为方便描述,将为1的元素用英文字母表示。

上图展示了前三个步骤,相当于一个广度优先遍历的过程:

(1)初始化一个队列vec,其中装载起始位置start。

(2)得到vec的大小,依据这个数量从头出队,每次拿到出队元素时将其设置为0(免得往回走),并装载其上下左右为不0的位置入队。

(3)直到满足边界条件。

 

#include<iostream>
#include<deque>
#include<vector>
using namespace std;

struct coord{
	int x;
	int y;
	coord(int t, int p) :x(t), y(p){}
};


int maxStep(vector<vector<int>> arr){
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值