本人是一名菜鸟,刷leetcode被难到了,所以记录一下这个点后面希望能够快速回忆起来,bounded first search,相当于影分身之术后继续放影分身,直到结果达到为止。 特点是分身,通过辅助队列来存储分身。需要额外的空间。
https://leetcode-cn.com/explore/learn/card/queue-stack/217/queue-and-bfs/872/
11110
11010
11000
00000
step1: grid[0][0]
step2: grid[0][1],grid[1][0]
setp3:grid[0][2],grid[1][1],grid[2][0]
....
基本思路,遍历grid ,每经过一个点都上下左右四个点都搜索一遍
Q1:如何确保不重复搜索? 复制一个和grid一样大小的0数组,经过后设置标识为1
Q2:开始分身搜索之术,当mark =0 ,grid =1的时候进入BFS搜索,否则断层了就算+1
Q3:BFS细节,采用大佬写的博客
https://blog.csdn.net/weixin_40546602/article/details/88546583
辅助队列,python里可以用List来做:标记mark[x][y]为1,并将待搜索的位置(x,y)push进入队列Q。
只要队列不为空,则取队头元素,按照方向数组的4个方向,拓展4个新位置newx,newy。
若新位置不在地图范围内nextX < 0 or nextX >=m or nextY <0 or nextY >=n
如果新位置未曾到达过(marked[newx][newy]为0) and 是陆地(grid[newx][newy]为‘1‘),该新位置push进入队列, 并标记marked[newx][newy] = 1。
Q4:实现后删除代码,过一天后重写
重点难点:
1.确定marked数组和grid一致,且标识统一,第一次写的时候大小反了,导致结果错误
2.确认当前xy和下一步xy很重要,第一次写的时候这里出错排查了一会
原文:https://www.cnblogs.com/xiaozuanfeng/p/12027285.html