1 並查集的意義
判斷連通性問題
初始化每個元素都是不同集合
判斷兩個點是否連通,檢視是否在同乙個集合中即可
2 quickfinduf實現
顧名思義,查詢非常快,用陣列來儲存,每個索引對應的是集合的編號
/**
* @author created by qiyei2015 on 2019/12/11.
* @version: 1.0
* @email: [email protected]
* @description: 快速查詢的並查集
* 用陣列來儲存,每個索引對應的是集合的編號
*/public class quickfinduf implements uf
}@override
public int size()
/*** 時間複雜度o(n)
* @param p
* @param q
*/@override
public void union(int p, int q)
for (int i = 0 ;i < id.length ;i++)}}
@override
public boolean connected(int p, int q)
/*** 找到元素所p在集合編號
* @param p
* @return
*/private int find(int p)
return id[p];
}}
這種並查集的union操作時間複雜度是o(n),因此一般不採用這種實現,後續會介紹快速連線的並查集及其優化過程 並查集 並查集
本文參考了 挑戰程式設計競賽 和jennica的github題解 陣列版 int parent max n int rank max n void init int n int find int x else void union int x,int y else 結構體版 struct node ...
java實現並查集
並查集是根據這篇博文學習的,寫得很不錯 下面是實現 public class unionfindset count n 合併p,q所在集合 param p param q public void union int p,int q if size rootp size rootq else coun...
C 實現並查集
將n個不同的元素分成一組不相交的集合。開始時,每個元素就是乙個集合,然後按規律將兩個集合進行合併。假如已知有n個人和m對好友關係 存於陣列r 如果兩個人是直接的或間接的好友關係 好友的好友的好友.則認為他們屬於同一好友圈,請求出這n個人中有幾個好友圈。例如 n 5,m 3,r 表示有5個人,1和2是...