200. 岛屿数量

描述

给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。

岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。

此外,你可以假设该网格的四条边均被水包围。

链接

200. 岛屿数量 - 力扣(LeetCode) (leetcode-cn.com)

 

解法:回溯法(思路比较清晰)

class Solution {
    public int numIslands(char[][] grid) {
        int count = 0;
        int[][] mark = new int[grid.length][grid[0].length];
        for (int[] c : mark) {
            Arrays.fill(c, 0);
        }

        for (int i = 0; i < grid.length; i++) {
            for (int j = 0; j < grid[i].length; j++) {
                if(mark[i][j] == 0 && grid[i][j] == '1') {
                    DFS(grid, i, j, mark);
                    count++;
                }
            }
        }
        return count;
    }

    private void DFS(char[][] grid, int x, int y, int[][] mark) {
        mark[x][y] = 1;
        int[] dx = {-1, 1, 0, 0};
        int[] dy = {0, 0, -1, 1};
        for (int k = 0; k < 4; k++) {
            int newDx = dx[k] + x;
            int newDy = dy[k] + y;
            if (newDx < 0 || newDx >= grid.length || newDy < 0 || newDy >= grid[newDx].length) {
                continue;
            }
            if (mark[newDx][newDy] == 0 && grid[newDx][newDy] == '1') {
                DFS(grid, newDx, newDy, mark);
            }
        }
    }
}

 

可详细参考

AlgoMooc算法慕课网

posted @ 2021-12-01 23:05  DidUStudy  阅读(27)  评论(0编辑  收藏  举报