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演算法演算法
- Algorithm(4th) 1.5 union-find演算法Go演算法
- 程式碼塊
- Java中靜態程式碼塊、構造程式碼塊、建構函式、普通程式碼塊Java函式
- 五:程式碼塊
- java 程式碼塊Java
- Java普通程式碼塊,構造程式碼塊,靜態程式碼塊區別,執行順序的程式碼例項Java
- 並查集演算法Union-Find的思想、實現以及應用並查集演算法
- 構造程式碼塊
- 靜態程式碼塊
- Java - 26 程式碼塊Java
- JS常用程式碼塊JS
- Xcode自定義程式碼塊XCode
- Java 中的程式碼塊Java
- Concurrency(六: 同步程式碼塊)
- Java中的程式碼塊Java
- 程式碼初始化塊
- Java靜態程式碼塊Java
- union 和union all 使用區別
- union all和union的區別
- union和union all 關鍵字
- java中的程式碼塊(初始化塊)Java
- 關於Static程式碼塊、匿名程式碼塊、構造器的小擴充C程式
- MySQL學習(五) UNION與UNION ALLMySql
- sql中union和union all的用法SQL
- Pycharm程式碼塊的設定PyCharm
- synchronized 程式碼塊怎麼用synchronized
- union用法
- union注入
- Java中建構函式、靜態程式碼塊、程式碼塊的執行順序Java函式
- sql中UNION和UNION ALL的區別SQL
- static變數,static程式碼塊,建構函式,程式碼塊等的載入順序變數C程式函式
- xcode10 自定義程式碼塊XCode
- Ruby 中的閉包-程式碼塊
- Typora 程式碼塊Mac風格化Mac
- static程式碼塊、構造程式碼塊、建構函式以及Java類初始化順序C程式函式Java
- Java中構造方法,構造程式碼塊和靜態程式碼塊執行順序詳解Java構造方法