zoukankan      html  css  js  c++  java
  • 使用 Rust 实现并查集

    最近在刷 Leetcode, 每日题打卡题经常出现并查集, 这里记录下使用 Rust 实现的并查集.

        pub struct UnionFind {
            n: usize,
            fa: Vec<usize>,
        }
    
        impl UnionFind {
            pub fn new(n: usize) -> Self {
                Self {
                    n,
                    fa: (0..n).collect(),
                }
            }
    
            // 并查集中不同集合的数量
            pub fn count(&self) -> usize {
                let mut c = 0;
                for i in 0..self.fa.len() {
                    if self.fa[i] == i {
                        c += 1;
                    }
                }
                c
            }
    
            pub fn find(&mut self, x: usize) -> usize {
                assert_eq!(x < self.n, true);
                if self.fa[x] == x {
                    x
                } else {
                    // 路径压缩
                    let find_fa = self.find(self.fa[x]);
                    self.fa[x] = find_fa;
                    self.fa[x]
                }
            }
    
            pub fn merge(&mut self, i: usize, j: usize) {
                let ifa = self.find(i);
                let jfa = self.find(j);
                self.fa[ifa] = jfa;
            }
    
            pub fn connected(&mut self, i: usize, j: usize) -> bool {
                self.find(i) == self.find(j)
            }
        }
    
  • 相关阅读:
    GITHUB常见命令
    GITHUB常用命令
    java构建简单的HTTP服务器
    是否会被锁
    GITHUB使用指南
    GITHUB使用指南、
    C#
    金蝶后台表对应
    金蝶K3表
    nodejs nodejs的操作
  • 原文地址:https://www.cnblogs.com/wbin91/p/14342227.html
Copyright © 2011-2022 走看看