力扣-934. 最短的桥
本文最后更新于:2022年10月26日 晚上
题目描述
思路及实现
看题,想都不用想迷宫问题直接bfs或者dfs完事了好吧(
可能题目描述不是很好,在这里简单描述一下,岛是这样定义的:相连的1。也就是一个1,它的四个方向如果某个方向有1,那么这些1算一个岛,如果没有,那它本身就是一个岛。
所以,为了防止我们搭桥搭到本岛,我们需要先把第一个岛找出来:首先直接遍历,直到找到是一个是1的位置(代表陆地的位置),然后用dfs或者bfs把所有相邻的1找出来,下面代码我用的是迭代实现的dfs。
找完一个岛之后,我们就开始搭桥了。这里需要用到bfs,因为需要搭一个最短的桥,bfs可以每次往外扩一圈。
但是这里需要对bfs进行一点修改,采用的是这样的策略:我们把当前踩的地方利用bfs遍历完,这才代表往外扩大一圈,桥长度加一,然后这次遍历新找到的地方存放在一个新队列,用于下次扩圈。当然如果bfs过程中找到1(陆地)了,就直接返回桥的长度。
1 |
|
希望本文章能够帮到您~
力扣-934. 最短的桥
https://map1e-g.github.io/2022/10/25/leetcode-934/