题目
给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。
岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。
此外,你可以假设该网格的四条边均被水包围。
示例 1:
输入:
[
[‘1’,‘1’,‘1’,‘1’,‘0’],
[‘1’,‘1’,‘0’,‘1’,‘0’],
[‘1’,‘1’,‘0’,‘0’,‘0’],
[‘0’,‘0’,‘0’,‘0’,‘0’]
]
输出: 1
示例 2:
输入:
[
[‘1’,‘1’,‘0’,‘0’,‘0’],
[‘1’,‘1’,‘0’,‘0’,‘0’],
[‘0’,‘0’,‘1’,‘0’,‘0’],
[‘0’,‘0’,‘0’,‘1’,‘1’]
]
输出: 3
解释: 每座岛屿只能由水平和/或竖直方向上相邻的陆地连接而成。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/number-of-islands
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思想
1.先了解一下深度优先搜索(dfs)和广度优先搜索(bfs)的基本思想。
深度优先:
深度优先遍历图的方法是,从图中某顶点v出发:
(1)访问顶点v;
(2)依次从v的未被访问的邻接点出发,对图进行深度优先遍历;直至图中和v有路径相通的顶点都被访问;
(3)若此时图中尚有顶点未被访问,则从一个未被访问的顶点出发,重新进行深度优先遍历,直到图中所有顶点均被访问过为止。
广度优先:
是一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。
2.在这道题中,我们考虑使用深度优先搜索。
3.如图:
①:grid[0][0]为1,1代表陆地,那么我们就遍历grid[0][0]的上下左右。由于上和左没有,我们就探寻grid[0][1]和grid[1][0],由于采用的深度优先,我们先遍历grid[1][0],判断是否为1,是1,则继续遍历grid[2][0],由于grid[3][0]不为1,我们接下来遍历grid[2][1],循环往复,一般遇到非0的,我们就开始回溯,去遍历上一个周围其他未遍历的。
②: 我们每遍历过一个为1的,就将其置为0,并且,如果我们遍历的这个位置的周围通过遍历都是字符0 的话,那么我们的岛屿数量count就加一。
③: 一直遍历,直至整个grid遍历完为止。

这篇博客介绍如何利用深度优先搜索(DFS)解决LeetCode的200号问题——计算二维网格中的岛屿数量。文章详细阐述了DFS的基本思想,并提供了解题步骤和代码实现。在解题过程中,当遇到陆地(1)时,会遍历其相邻的格子,将遍历过的陆地标记为水(0),并在所有相邻陆地遍历完成后增加岛屿计数。
最低0.47元/天 解锁文章
1524

被折叠的 条评论
为什么被折叠?



