岛屿问题
岛屿问题
我们所熟悉的 DFS(深度优先搜索)问题通常是在树或者图结构上进行的。
只需要在树的遍历的基础上进行改进就好。
树是访问相邻的左右子树节点,而图是访问上下左右的节点。
树是要判断该root节点是否为null,而图是要判断该节点是否出界。
树的框架代码:
1 |
|
网络的框架代码:
1 |
|
岛屿数量-leetCode200
给你一个由 '1'
(陆地)和 '0'
(水)组成的的二维网格,请你计算网格中岛屿的数量。
岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
此外,你可以假设该网格的四条边均被水包围。
示例 1:
1 |
|
示例 2:
1 |
|
深度
首先遍历数组,如果数组的元素为1,则遍历它的上下左右。而它的上下左右元素也使用同样的方法进行上下左右的遍历。
代码为:
1 |
|
广度
遍历网路,将为1的格子加入到队列中,开始进行广度优先搜索。在广度优先搜索的过程中,每个搜索到的 11 都会被重新标记为 00。直到队列为空,搜索结束。
1 |
|
岛屿的周长
递归
代码为:
1 |
|
迭代
我们可以遍历每个陆地格子,看其四个方向是否为边界或者水域,如果是,将这条边的贡献(即 1)加入答案 ans 中即可。
代码为:
1 |
|
方法三
或者设置遍历每个为 1 的方格,初始周长都为4,遍历该方格的上下左右,如果为1,则减1。
代码为:
1 |
|
岛屿的最大面积
给你一个大小为 m x n
的二进制矩阵 grid
。
岛屿 是由一些相邻的 1
(代表土地) 构成的组合,这里的「相邻」要求两个 1
必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid
的四个边缘都被 0
(代表水)包围着。
岛屿的面积是岛上值为 1
的单元格的数目。
计算并返回 grid
中最大的岛屿面积。如果没有岛屿,则返回面积为 0
。
示例 1:
1 |
|
示例 2:
1 |
|
递归
与岛屿的数量很相似,这个是求岛屿中的最大岛屿的数量。
代码为:
1 |
|
迭代
遍历网络,如果网格是1,则加入到队列中,从队列中取数,遍历岛屿的数量,维护一个max,求岛屿中数量大最大值。
下面这段代码使用一个栈存储数据,该数据是i*grid[0].length+j
,因为再取出数据后,可以通过这个数得到横纵坐标。
也可以使用两个栈去分别存储,横纵坐标。
代码为:
1 |
|