力扣 200. 岛屿数量

78 阅读1分钟

200. 岛屿数量

给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。

岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。

此外,你可以假设该网格的四条边均被水包围。

思路:广搜

循环遍历节点是'1'的数量,找到后把其相邻以及能到达的陆地状态都标记(这里记为'0'),标记陆地的方法可以用广搜

广搜三步曲

  • 第一步,确定递归函数,函数参数dfs(params...)
  • 第二步,确定函数结束条件
  • 第三步,处理和这个点连接的各个点的关系
func numIslands(grid [][]byte) int {
   nums := 0
   // 循环遍历
   for i := 0; i < len(grid); i++ {
      for j := 0; j < len(grid[i]); j++ {
         if grid[i][j] == '1' {
            nums++
            dfs(grid, i, j)
         }
      }
   }
   return nums
}
// 确定dfs的函数,参数
func dfs(arr [][]byte, x, y int) {
   // 终止及条件
   if x < 0 || x >= len(arr) || y < 0 || y >= len(arr[0]) {
      return
   }
   // 标记 -- 处理和其他节点的关系,这里不需要回溯
   if arr[x][y] == '0' {
      return
   }
   arr[x][y] = '0'
   dfs(arr, x+1, y)
   dfs(arr, x-1, y)
   dfs(arr, x, y+1)
   dfs(arr, x, y-1)
}