二维数组,深度优先算法 -- 岛屿数量

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/number-of-islands

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


思路:

1、线性遍历二维数组的所有数据

2、遇到1时,岛屿数目+1,开始深度优先遍历找到整个岛屿,并在遍历过程中把找到的陆地置为0

3、深度优先算法 使用

代码

class Solution {

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

    public int numIslands(char[][] grid) {
        int count = 0;
        for(int i=0;i<grid.length;i++)
        {
            for(int j=0;j<grid[0].length;j++)
            {
                if(grid[i][j]=='1')
                {
                    count++;
                    dfs(grid,i,j);
                }
            }
        }
        return count;

    }
}

 

posted on 2020-03-23 20:05  洛小侠  阅读(777)  评论(0编辑  收藏  举报

导航