並查集略講 內容用C語音

2021-10-17 19:13:56 字數 1206 閱讀 8772

題目大概就是判斷這個圖是否是閉環,是否是開環。

用並查集的方法。

(這些天,力扣的題好多都是並查集,實在是頭痛)

**如下,其中每步都差不多有介紹。希望能看懂,早日擺脫並查集的困擾(搞得像我自己也擺脫了一樣)(**沒有錯)

剛開始定義的god是上面圖中有6個

rank是樹的長度,為了減少可能存在的樹的長度**問題

這個assignment函式是為了讓陣列裡的每個數都重置,本人英語不好……莫怪

這find_root函式是為了尋找數的根節點

union_vertries這個函式就是合併根節點了

上面說的幾個函式在並查集裡都是通用的

#include

#define god 6

//從上面圖上你也能看出是六個數,自然要設定為6

intassignment

(int parent,

int rank[

]//這個rank是為了減少可能存在的樹的長度**)

//本函式是重置數值

intfind_root

(int x,

int parent)

//這個函式是為了尋找每個數的根節點

return x_root;

}int

union_vertries

(int x,

int y,

int parent,

int rank)

else

//這裡是為了縮小執行。通過rank的大小判斷樹的高低

else

if(rank[x_root]

)else

return1;

}}intmain()

;int rank[god]=;

assignment

(parent,rank)

;//看完上面的函式,下面的式子自動帶入就行

int edge[6]

[2]=

,,,,

,};int i;

for(i =

0;iprintf

("no cycle detected!\n");

return0;

}

所以答案就是閉環的。希望能對大家有所

用c語言實現 並查集

題目描述 假如已知有n個人和m對好友關係 存於集合r 如果兩個人是直接或間接的好友 好友的好友的好友 則認為他們屬於同乙個朋友圈。請寫程式求出這n個人裡一共有多少個朋友圈。輸入輸入包含多個測試用例,每個測試用例的第一行包含兩個正整數 n m,1 n,m 100000。接下來有m行,每行分別輸入兩個人...

C 實現並查集

將n個不同的元素分成一組不相交的集合。開始時,每個元素就是乙個集合,然後按規律將兩個集合進行合併。假如已知有n個人和m對好友關係 存於陣列r 如果兩個人是直接的或間接的好友關係 好友的好友的好友.則認為他們屬於同一好友圈,請求出這n個人中有幾個好友圈。例如 n 5,m 3,r 表示有5個人,1和2是...

並查集實現(c )

1.何為並查集?並查集是一種樹型的資料結構,用於處理一些不相交集合的合併及查詢問題,簡單的說就是對集合操作的一種資料結構。2.做什麼用 考慮這樣乙個問題 若某個家族人員過於龐大,要判斷兩個是否是親戚,確實還很不容易,給出某個親戚關係圖,求任意給出的兩個人是否具有親戚關係。規定 x和y是親戚,y和z是...