给你一个由
'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)
}