並查集判斷環 並查集的路徑壓縮 和 帶秩優化

2021-10-02 04:23:34 字數 1484 閱讀 9107

1.判斷環:

參考部落格

思路

1.將用過的路徑連起來成為乙個集合,記錄下來

2. 如果連通的兩個邊屬於乙個集合,那麼這個並查集就形成了乙個環

燈神**

如果刪除2,4邊

,// 可將2,4這條邊刪除測試**是否正確 如果刪除此邊則不會出現環記得將6改為5};

initialise

(parent)

;for

(int i=

0; i<

6; i++)}

printf

("no cycle found.\n");

return0;

}2.帶秩優化:

**實現:

用ranks [n]陣列代表該父節點的秩也就是樹高度

if

(ranks[end]

> ranks[start]

)else

if(ranks[end]

< ranks[start]

)else

路徑壓縮:

為了進一步減短查詢路徑,可以使查詢路徑中的每乙個節點都指向根結點,這就是路徑壓縮。

參考部落格

**實現:

//下面是採用遞迴路徑壓縮的方法查詢元素,但是,遞迴壓縮路徑可能會造成溢位棧,會發生re

intfind

(int x)

//下面我們說一下非遞迴方式進行的路徑壓縮:

intfind

(int x)

return r;

//返回根節點的值

}

並查集路徑壓縮 並查集 UnionFind 入門

咳咳,剛看完海賊更新,馬上呼哧呼哧寫下這篇文章,這週的目標就是出一篇並查集相關的文章,真的是時間咻咻一下就沒了。本文閱讀大概需要3分鐘。好了,並查集呢,英文叫union find 並查集是一種樹型的資料結構,通常來用於處理一些不相交集合的合併 union 問題,以及查詢 find 問題。如下 1 有...

並查集 壓縮路徑

並查集 union findsets 一種簡單的用途廣泛的集合.並查集是若干個不相交集合,能夠實現較快的合併和判斷元素所在集合的操作,應用很多,如其求無向圖的連通分量個數等。最完美的應用當屬 實現kruskar演算法求最小生成樹。並查集的精髓 即它的三種操作,結合實現 模板進行理解 1 make s...

並查集路徑壓縮

使用並查集查詢時,如果查詢次數很多,那麼使用樸素版的查詢方式肯定要超時。比如,有一百萬個元素,每次都從第一百萬個開始找,這樣一次運算就是10 6,如果程式要求查詢個一千萬次,這樣下來就是10 13,肯定要出問題的。這是樸素查詢的 適合資料量不大的情況 int findx int x 下面是採用路徑壓...