首页 > 其他 > 详细

Union Find 并查集

时间:2020-03-22 23:48:06      阅读:81      评论:0      收藏:0      [点我收藏+]

给定两个点判断他们是否相连。

 1 package com.graph;
 2 
 3 public class UnionFind {
 4     private int[] id; // parent links
 5     private int[] sz; // size of components for roots
 6     private int count; // number of components
 7 
 8     public UnionFind(int N) {
 9         count = N;
10         for (int i = 0; i < N; i++) {
11             id[i] = i;
12             sz[i] = 1;
13         }
14     }
15 
16     public int count() {
17         return count;
18     }
19 
20     public int find(int p) {
21         // follow links to find a root.
22         while (p != id[p]) {
23             p = id[p];
24         }
25         return p;
26     }
27 
28     public void union(int p, int q) {
29         int i = find(p);
30         int j = find(q);
31         if (i == j) {
32             return;
33         }
34         // make smaller root point to larger one
35         if (sz[i] < sz[j]) {
36             id[i] = j;
37             sz[j] += sz[i];
38         } else {
39             id[j] = i;
40             sz[i] += sz[j];
41         }
42         count--;
43     }
44 
45 }

 

Union Find 并查集

原文:https://www.cnblogs.com/tangdatou/p/12548735.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!