zoukankan      html  css  js  c++  java
  • 200. 岛屿数量-并查集-中等

    问题描述

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

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

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

    示例 1:

    输入:
    [
    ['1','1','1','1','0'],
    ['1','1','0','1','0'],
    ['1','1','0','0','0'],
    ['0','0','0','0','0']
    ]
    输出: 1
    示例 2:

    输入:
    [
    ['1','1','0','0','0'],
    ['1','1','0','0','0'],
    ['0','0','1','0','0'],
    ['0','0','0','1','1']
    ]
    输出: 3
    解释: 每座岛屿只能由水平和/或竖直方向上相邻的陆地连接而成。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/number-of-islands

    解答

    //并查集中连通分量的数目
    class Solution {
        int[] parents;
        public int find(int x){
            if(parents[x] == -1)return x;
            return find(parents[x]);
        }
        public void union(int x, int y){
            int xP = find(x);
            int yP = find(y);
            if(xP != yP)parents[xP] = yP;
        }
        public int numIslands(char[][] grid) {
            int r = grid.length;
            if(r == 0)return 0;
            int c = grid[0].length;
            if(c == 0)return 0;
            int len = r*c;
            parents = new int[r*c];
            Arrays.fill(parents, -2);
            for(int i=0;i<r;i++)
                for(int j=0;j<c;j++)
                    if(grid[i][j] == '1')parents[i*c+j] = -1;
            for(int i=0;i<r;i++)
                for(int j=0;j<c;j++){
                    if(grid[i][j] == '1'){
                        if(i<r-1 && grid[i+1][j] == '1')union((i+1)*c+j, i*c+j);
                        if(j<c-1 && grid[i][j+1] == '1')union(i*c+j, i*c+j+1);
                    }
                }
            int islands=0;
            for(int i:parents)
                if(i==-1)islands++;
            return islands;
        }
    }
  • 相关阅读:
    09-13练习
    IDEA设置项目文件自动Add到Svn/Git
    虚拟机启动项目时报错
    微服务调用时报错
    查询每个月每一天的访问量
    在IDEA中关于项目java版本问题
    复习宝典之设计模式
    复习宝典之Maven项目管理
    复习宝典之Mysql数据库
    复习宝典之Redis
  • 原文地址:https://www.cnblogs.com/xxxxxiaochuan/p/13717621.html
Copyright © 2011-2022 走看看