並查集是一種樹型資料結構,用於處理一些不相交集合的合併問題。
並查集主要操作有:
(1)合併兩個不相交集合;
(2)判斷兩個元素是否屬於同乙個集合;
(3)路徑壓縮;
用father[i]表示元素i的父親結點,例如:
用某個元素所在樹的根節點表示該元素所在集合;
判斷兩個元素是否屬於同乙個集合的時候,只需要判斷他們所在樹的根節點是否一樣即可;
也就是說,當我們合併兩個集合的時候,只需要在兩個根節點之間連邊即可。
1int findfather(int
x)
1bool judge(int x,int
y)
1每次查詢的時候,如果路徑較長,則修改資訊,以便下次查詢的時候速度更快;void unionset(int x,int
y)
(1)找到根節點;
(2)修改查詢路徑上的所有結點,將他們都指向根節點;
例如查詢下面並查集中的「20」,「9,10,20」均在查詢路徑上,則進行路徑壓縮
兩個集合合併,也就是2棵樹合併,為了降低合併後的樹的深度,一般採取將深度小的樹的樹根作為深度大的樹的樹根的孩子節點。
增加輔助空間記錄樹的深度。
合併**:
1(1)銀河英雄傳說(noi2002)void unionset(int x,int
y)else
13 }
(2)食物鏈(noi2001)
(3)parity(ceoi99)
資料結構與演算法之並查集
並查集結構可以用於 1 檢查兩個元素是否屬於同乙個集合 比如對於圖1這個例子來說,如果我們想要檢查節點d和節點e是否屬於同乙個集合,可以這樣操作 d節點往上找其父節點,一直往上找,直到某個節點的父節點是其本身,此時停止 找到了節點a e節點也按照相同的步驟往上找其父節點,找到節點a 如果這兩個節點往...
資料結構與演算法之並查集
並查集 union find 是一種高效的資料結構,主要的操作有 為方便敘述,把所有元素視作點,元素之間的關係視作線,存在聯絡便存在關係 需要注意的是,這裡的關係應當是1.自反的,2.對稱的,3.傳遞的 所謂合併,便是將兩個點之間 畫 一條線。又上邊的定義不難理解相連的若干點之間互相存在關係,這樣我...
演算法與資料結構(六)並查集
圖相關演算法的實現。一種不一樣的樹形結構 連線問題 connectivity problem 視覺化的來看連線問題 連線問題 左上右下是否是連線的呢?意義 實際應用中的作用 社交網路 facebook中使用者a和b中的聯絡 好友關係 是否能聯絡到。電影書籍,多 之間形成網路。網際網路網頁之間形成的網...