首页 > 编程语言 >算法-并查集-200

算法-并查集-200

时间:2023-04-15 12:34:14浏览次数:32  
标签:200 int 查集 rowCount 算法 colCount grid root public

public class Solution {
    public int NumIslands(char[][] grid) {
    if(grid == null || grid.Count() == 0) return 0;
    int rowCount = grid.Count();
    int colCount = grid[0].Count();
    int waters = 0;
    UnionFind uf = new UnionFind(grid);
    for(int i=0;i<rowCount;i++)
    {
        for(int j=0;j<colCount;j++)
        {
            if(grid[i][j] == '0')
            {
                waters++;
            }else{
                int[][] direction = new int[][]{  new int[]{0,1},
                                        new int[]{0,-1},
                                        new int[]{1,0},
                                        new int[]{-1,0}
                                    };
                foreach(var dir in direction)
                {
                    int x = i + dir[0];
                    int y = j + dir[1];
                    if(x >= 0 && y >= 0 && x < rowCount && y < colCount && grid[x][y] == '1')
                    {
                        uf.Union(x*colCount+y,i*colCount+j);
                    }

                }
            }
        }
    }
    return uf.GetCount() - waters;
    }

 

}

// unionFind函数
public class UnionFind{
    private int[] root = null;
    private int count = 0;

    public UnionFind(char[][] grid)
    {
        int colCount = grid.Length;
        int rowCount = grid[0].Length;
        root = new int[colCount*rowCount];
        count = colCount*rowCount;
        for (int i = 0; i < colCount*rowCount; i++)
        {
            root[i] = i;
        }
    }

    private int Find(int x)
    {
        if (x == root[x])
        {
            return x;
        }
        return root[x] = Find(root[x]);
    }

    public void Union(int x,int y)
    {
        int rootX = Find(x);
        int rootY = Find(y);
        if (rootX != rootY) {
            root[rootX] = rootY;
            count --; 
        }
    }

    public int GetCount(){
        return count;
    }

}

 

标签:200,int,查集,rowCount,算法,colCount,grid,root,public
From: https://www.cnblogs.com/Insist-Y/p/17320864.html

相关文章

  • 算法-丑数2-构造小根堆
    intNthUglyNumber(intn){if(n==1)return1;List<long>arr=newList<long>();//这里用list,它会自己扩容,用数组就需要自己操作这些了arr.Add(1);int[]uglyArr={2,3,5};HashSet<long>hs=newHashSet<long>();hs.Add(1);......
  • 《Python算法交易实战》——yfinace获取yahoo财经数据
    因为从2021年11月1日起,用户无法从中国大陆地区使用Yahoo产品与服务所以下面两个错误,都是代理配置的问题error:Notimezonefound,symbolmaybedelistederror:Nodatafoundforthisdaterange,symbolmaybedelisted以下是解决办法:1.实现强劲上网,保证你可以在浏览器......
  • 2023-04-14 算法面试中常见的查找表问题
    2023-04-14算法面试中常见的查找表问题1Set的使用LeetCode349号问题:两个数组的交集给定两个数组,编写一个函数来计算它们的交集。示例1:输入:nums1=[1,2,2,1],nums2=[2,2]输出:[2]示例2:输入:nums1=[4,9,5],nums2=[9,4,9,8,4]输出:[9,4]说明:输......
  • 实验一 密码引擎-4-国䀄算法交叉测试
    任务详情02人一组,创建一个文件,文件名为小组成员学号,内容为小组成员学号和姓名1在Ubuntu中使用OpenSSL用SM4算法加密上述文件,然后用龙脉eKey解密,提交代码和运行结果截图2在Ubuntu中基于OpenSSL产生一对公私钥对(SM2算法)3在Ubuntu中使用OpenSSL用SM3算法计算上述文件的Hash值,然后......
  • Paillier半同态加密算法及C++实现
    Paillier半同态加密系统详解及C++实现Paillier半同态加密系统详解及C++实现一、Paillier同态加密算法1.1基本概念1.2算法思路1.3加解密过程密钥生成KeyGeneration加密Encryption解密Decryption二、C++实现2.1实验环境Linux版本编译器版本2.2......
  • c/c++快乐算法第一天
    c/c++感受算法乐趣(1)开始时间2023-04-14 18:31:47结束时间2023-04-14 22:06:02前言:经过两天的学习,是不是发现编程也挺简单的。其实不然,学好算法同时也是练习编程的关键一环。接下来每周末我将会带领你感受算法的乐趣。目前题目摘自c语言趣味编程100例清华大学出版社,我会根据编......
  • 递归算法;求n的阶层
    java:importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);Stringa=sc.next();intb=Integer.parseInt(a);System.out.print(factorial(b));}p......
  • 极简cfs公平调度算法
    1.说明1>linux内核关于task调度这块是比较复杂的,流程也比较长,要从源码一一讲清楚很容易看晕2>本篇文章主要是讲清楚cfs公平调度算法如何将task在时钟中断驱动下切换调度,所以与此无关的代码一律略过3>本篇只讲最简单的task调度,略过组调度,组调度在下一篇《极简组调度-CGroup......
  • AGC002D Stamp Rally 多种做法 kruskal重构树/可持久化并查集/整体二分
    D-StampRally(atcoder.jp)这题做法很多,我写的是可持久化并查集做法,但是裸的可持久化并查集是$O(nlog^3n)$,能过但是很慢!看洛谷的题解有一位大佬写了一个很妙的并查集的写法,按秩合并,每一步合并时用vector记录一下这个被合并到的节点的size和当前的时间,这样做可以找到每一个时......
  • 基于L2-RLS算法的目标跟踪算法matlab仿真,可处理小范围遮挡问题
    1.算法仿真效果matlab2022a仿真结果如下:2.算法涉及理论知识概要目标表观模型是跟踪器的重要组成部分,用来描述目标表观的特征.基于判别式模型的表观模型用来区分目标和背景;基于生成式模型的表观模型用来描述目标本身,提取出目标的特征.本文合理地融合了判别式模型和生成式模型......