岛屿数量
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/411647e079ba4c4c8ec92d774adb43d1.png)
package picture
func numIslands(grid [][]byte) int {
res := 0
if len(grid) == 0 {
return 0
}
nr, nc := len(grid), len(grid[0])
var dfs func(grid [][]byte, r, c int)
dfs = func(grid [][]byte, r, c int) {
nr := len(grid)
nc := len(grid[0])
if r < 0 || c < 0 || r >= nr || c >= nc || grid[r][c] == '0' {
return
}
grid[r][c] = '0'
dfs(grid, r-1, c)
dfs(grid, r+1, c)
dfs(grid, r, c-1)
dfs(grid, r, c+1)
}
for r := 0; r < nr; r++ {
for c := 0; c < nc; c++ {
if grid[r][c] == '1' {
res++
dfs(grid, r, c)
}
}
}
return res
}
func numIslandsII(grid [][]byte) int {
res := 0
for i := 0; i < len(grid); i++ {
for j := 0; j < len(grid[i]); j++ {
if grid[i][j] == '1' {
res++
DFS(grid, i, j)
}
}
}
return res
}
func DFS(grid [][]byte, r, c int) {
h, w := len(grid), len(grid[0])
if r < 0 || r >= h || c < 0 || c >= w {
return
}
if grid[r][c] == '0' {
return
}
grid[r][c] = '0'
DFS(grid, r-1, c)
DFS(grid, r+1, c)
DFS(grid, r, c-1)
DFS(grid, r, c+1)
}
type point struct {
x, y int
}
func numIslandsIII(grid [][]byte) int {
count := 0
for i := 0; i < len(grid); i++ {
for j := 0; j < len(grid[0]); j++ {
if grid[i][j] == '1' {
bfs(grid, i, j)
count++
}
}
}
return count
}
func bfs(grid [][]byte, i, j int) {
queue := make([]point, 0)
queue = append(queue, point{i, j})
for len(queue) > 0 {
cur := queue[0]
queue = queue[1:]
i, j = cur.x, cur.y
if i < 0 || j < 0 || i >= len(grid) || j >= len(grid[0]) || grid[i][j] == '0' {
continue
}
grid[i][j] = '0'
queue = append(queue, point{i + 1, j})
queue = append(queue, point{i - 1, j})
queue = append(queue, point{i, j + 1})
queue = append(queue, point{i, j - 1})
}
}