Union Find程式碼塊
如果我們要利用Index
比如說我們想把uf[]陣列變成下面這樣:
{0, 0, 2, 3, 2, 0} 這個意味著node0, node1, node5屬於同一個圖 node2 node 4 屬於另一個圖 node3屬於單獨一個圖
//首先 對uf進行初始化 每個的parent都設為自己
for (int i = 0; i < uf.length; i++) {
uf[i] = i;
}
//然後我們把題目給的輸入轉換成一個一個圖(就是union起來)加黑色輸入是一個List<List<Integer>>
for (List<Integer> pair : pairs) {
union(pair.get(0), pair.get(1));
}
//當我們之後想要判斷哪些節點屬於同一個圖 就重新遍歷所有的可能節點 利用find()函式找出其root,然後同一個root都聚集在一個List中 這個可以用Hashmap去存,就是說存一個HashMap<Integer, List<Integer>>
//union函式
private void union(int[] uf, int a, int b) { //這兩個節點一定是屬於同一個圖的
int aParent = find(a);
int bParent = find(b);
if (aParent < bParent) { //往前找root 往前靠 如果a的parent 小一些 就把b的parent重新設為aParent(之前parent[bParent] = bParent)
uf[bParent] = aParent;
} else {
uf[aParent] = bParent;
}
}
//find函式
private int find(int[] uf, int x) {
if (x != uf[x]) {
uf[x] = find(uf, uf[x]);
}
return uf[x];
}
不過為了更直觀的表達 parent[] instead of uf[] would be better.
而且可以把uf[]作為一個全域性變數 這樣就不用每次都要帶上這個引數了
相關文章
- 並查集(Union Find)並查集
- 4. union-find演算法演算法
- 並查集(Union-Find) 應用舉例並查集
- 並查集 (Union-Find Sets)及其應用並查集
- Algorithm(4th) 1.5 union-find演算法Go演算法
- 並查集(Union-Find)演算法介紹並查集演算法
- 並查集(Union-Find) 應用舉例 --- 基礎篇並查集
- 程式碼塊
- Java中靜態程式碼塊、構造程式碼塊、建構函式、普通程式碼塊Java函式
- java 程式碼塊Java
- 五:程式碼塊
- 靜態程式碼塊、構造程式碼塊、構造方法構造方法
- Java普通程式碼塊,構造程式碼塊,靜態程式碼塊區別,執行順序的程式碼例項Java
- 並查集演算法Union-Find的思想、實現以及應用並查集演算法
- 構造程式碼塊
- 靜態程式碼塊
- JS常用程式碼塊JS
- sql中union和union allSQL
- Java 中的程式碼塊Java
- Java靜態程式碼塊Java
- Java中的程式碼塊Java
- union all和union的區別
- 理解full outer jion,union,union all
- union和union all的區別
- Union與Union All的區別
- union 和union all 使用區別
- java中的程式碼塊(初始化塊)Java
- 關於Static程式碼塊、匿名程式碼塊、構造器的小擴充C程式
- MySQL學習(五) UNION與UNION ALLMySql
- sql中union和union all的用法SQL
- 查詢集合操作union與union all
- ORACLE中union/union all/Intersect/Minus用法Oracle
- 【SQL】UNION ALL 與UNION 的區別SQL
- Oracle中的Union、Union All、Intersect、MinusOracle
- SQL UNION 和 UNION ALL 操作符SQL
- SQL Union和SQL Union All用法(轉)SQL
- union用法
- synchronized 程式碼塊怎麼用synchronized