增加岛屿数量深搜go版本
This commit is contained in:
@@ -326,6 +326,75 @@ if __name__ == '__main__':
|
|||||||
|
|
||||||
### Go
|
### Go
|
||||||
|
|
||||||
|
我们使用一个visited数组,记录下那些位置被遍历过。分为两层遍历。初始化一个visited数组和原始的grid一样大,用来记录哪些陆地被遍历过
|
||||||
|
|
||||||
|
第一层遍历遍历整个grid数组的元素,遇到陆地,就在对应的visited数组里标记,并且执行深度搜索,深搜的逻辑是把当前位置的4个方向上的位置,全部判断一遍看是不是陆地,如果是,则在这个位置上再执行深搜,达到递归深搜的效果。所以深搜函数里是递归的。
|
||||||
|
|
||||||
|
```go
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
func visitIsland(grid [][]int) int {
|
||||||
|
row := len(grid)
|
||||||
|
if row == 0 {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
visited := make([][]bool, row)
|
||||||
|
//go的这种初始化方式真的丑陋
|
||||||
|
for i := 0; i < row; i++ {
|
||||||
|
visited[i] = make([]bool, len(grid[0]))
|
||||||
|
}
|
||||||
|
ans := 0
|
||||||
|
for i := 0; i < row; i++ {
|
||||||
|
for j := 0; j < len(grid[0]); j++ {
|
||||||
|
if grid[i][j] == 1 && !visited[i][j] {
|
||||||
|
visited[i][j] = true
|
||||||
|
ans++
|
||||||
|
visitGrid(grid, visited, i, j)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ans
|
||||||
|
}
|
||||||
|
|
||||||
|
func visitGrid(grid [][]int, visited [][]bool, x int, y int) {
|
||||||
|
diff := [4][2]int{{1, 0}, {-1, 0}, {0, 1}, {0, -1}}
|
||||||
|
for _, arr := range diff {
|
||||||
|
nextX := x + arr[0]
|
||||||
|
nextY := y + arr[1]
|
||||||
|
if nextX < 0 || nextX >= len(grid) || nextY < 0 || nextY >= len(grid[0]) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if !visited[nextX][nextY] && grid[nextX][nextY] == 1 {
|
||||||
|
visited[nextX][nextY] = true
|
||||||
|
visitGrid(grid, visited, nextX, nextY)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
var row, col int
|
||||||
|
fmt.Scan(&row, &col)
|
||||||
|
if row <=0 || col <=0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
grid := make([][]int, row)
|
||||||
|
for i := 0; i < row; i++ {
|
||||||
|
grid[i] = make([]int, col)
|
||||||
|
}
|
||||||
|
for i := 0; i < row; i++ {
|
||||||
|
for j := 0; j < col; j++ {
|
||||||
|
fmt.Scan(&grid[i][j])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//这里必须要打印,不然报错会显示潜在的数组越界
|
||||||
|
fmt.Println(visitIsland(grid))
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
### Rust
|
### Rust
|
||||||
|
|
||||||
### JavaScript
|
### JavaScript
|
||||||
|
|||||||
Reference in New Issue
Block a user