难度:中等 题目来源:力扣(LeetCode) https://leetcode-cn.com/problems/number-of-islands

    说明:
    给定一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。

    示例:
    示例 1:

    输入: 11110 11010

    11000

    00000

    输出: 1

    示例 2:

    输入:

    11000

    11000

    00100

    00011

    输出: 3

    解法:

    1. func numIslands(grid [][]byte) int {
    2. if len(grid) == 0 {
    3. return 0
    4. }
    5. ret := 0
    6. for x, _ := range grid {
    7. if len(grid[x]) == 0 {
    8. continue
    9. }
    10. for y, _ := range grid[x] {
    11. if grid[x][y] == '1' {
    12. ret++
    13. dfs(grid, x, y)
    14. }
    15. }
    16. }
    17. return ret
    18. }
    19. func dfs(grid [][]byte, x, y int) {
    20. if grid[x][y] == '0' {
    21. return
    22. }
    23. grid[x][y] = '0'
    24. if x > 0 {
    25. dfs(grid, x-1, y)
    26. }
    27. if x < len(grid)-1 {
    28. dfs(grid, x+1, y)
    29. }
    30. if y > 0 {
    31. dfs(grid, x, y-1)
    32. }
    33. if y < len(grid[x])-1 {
    34. dfs(grid, x, y+1)
    35. }
    36. }