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算法慕课网