岛屿数量00

题目链接

岛屿数量

题目描述

岛屿数量00_第1张图片

注意点

  • grid[i][j] 的值为 ‘0’ 或 ‘1’

解答思路

  • 使用广度优先遍历思想遍历整个岛屿
  • 遍历整个二维网络,如果此时位置处的值为1,则当前位置是一个岛的一部分,从该位置向着四个方向遍历出整个岛屿,若任意位置已被记录为岛的一部分,则将该位置重置为0,防止后续同一个位置多次判断

代码

class Solution {
    public int numIslands(char[][] grid) {
        int res = 0;
        int row = grid.length;
        int col = grid[0].length;
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < col; j++) {
                if (grid[i][j] == '0') {
                    continue;
                }
                bfs(grid, i, j);
                res++;
            }
        }
        return res;
    }

    public void bfs(char[][] grid, int x, int y) {
        if (x < 0 || x >= grid.length || y >= grid[0].length || y < 0 || grid[x][y] == '0') {
            return;
        }
        grid[x][y] = '0';
        bfs(grid, x + 1, y);
        bfs(grid, x - 1, y);
        bfs(grid, x, y + 1);
        bfs(grid, x, y - 1);
    }
}

关键点

  • 广度优先遍历的思想
  • 若任意位置已被记录为岛的一部分,则将该位置重置为0,防止后续同一个位置多次判断

你可能感兴趣的:(算法TOP100,数据结构,leetcode,算法,广度优先)