Update 0200.岛屿数量.深搜版.md

This commit is contained in:
fwqaaq
2024-01-11 15:31:33 +08:00
committed by GitHub
parent 4e0ec1fa16
commit f6557d7ddc

View File

@ -389,50 +389,41 @@ function numIslands(grid: string[][]): number {
### Go ### Go
```go ```go
var DIRECTIONS = [4][2]int{{-1, 0}, {0, -1}, {1, 0}, {0, 1}}
func numIslands(grid [][]byte) int { func numIslands(grid [][]byte) int {
// 用1标记已访问 res := 0
visited := make([][]int, len(grid))
for i := 0; i < len(visited); i++{ visited := make([][]bool, len(grid))
visited[i] = make([]int, len(grid[0])) for i := 0; i < len(grid); i++ {
visited[i] = make([]bool, len(grid[0]))
} }
var bfs func(x, y int) for i, rows := range grid {
bfs = func(x, y int){ for j, v := range rows {
stack := make([][]int, 0) if v == '1' && !visited[i][j] {
stack = append(stack, []int{x, y}) res++
moveX := []int{1, -1, 0, 0} dfs(grid, visited, i, j)
moveY := []int{0, 0, 1, -1} }
}
}
for len(stack) != 0{ return res
node := stack[len(stack) - 1] }
stack = stack[:len(stack) - 1]
for i := 0; i < 4; i++{ func dfs(grid [][]byte, visited [][]bool, i, j int) {
dx := moveX[i] + node[0] for _, d := range DIRECTIONS {
dy := moveY[i] + node[1] x, y := i+d[0], j+d[1]
if dx < 0 || dx >= len(grid) || dy < 0 || dy >= len(grid[0]) || visited[dx][dy] == 1{ if x < 0 || x >= len(grid) || y < 0 || y >= len(grid[0]) {
continue continue
} }
visited[dx][dy] = 1 if grid[x][y] == '1' && !visited[x][y] {
if grid[dx][dy] == '1'{ visited[x][y] = true
stack = append(stack, []int{dx,dy}) dfs(grid, visited, x, y)
}
}
} }
} }
result := 0
for i := 0; i < len(grid); i++{
for j := 0; j < len(grid[0]); j++{
if visited[i][j] == 0 && grid[i][j] == '1'{
bfs(i, j)
visited[i][j] = 1
result++
}
}
}
return result
} }
``` ```