前两天去头条面了一波算法,面试官一点都不瞎比比,直接上来先做算法题。因为没和面试官沟通好,栽到这道题上了,分享如下:
给定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){