演算法歸納系列 並查集

2021-10-09 14:28:38 字數 1109 閱讀 6211

並查集主要用於判斷圖的聯通性以及判環等問題的解決。

並查集的定義

父陣列,儲存當前下標對應的父節點編號。

find(查詢祖先節點)操作 尋找父節點,(在此過程中將並查集樹壓平)

union (合併操作 聯通兩個點所在的集合)

給你乙個由 '1'(陸地)和 '0'(水)組成的的二維網格,請你計算網格中島嶼的數量。

島嶼總是被水包圍,並且每座島嶼只能由水平方向或豎直方向上相鄰的陸地連線形成。

此外,你可以假設該網格的四條邊均被水包圍。

示例 1:

輸入:[

['1','1','1','1','0'],

['1','1','0','1','0'],

['1','1','0','0','0'],

['0','0','0','0','0']

]輸出: 1

示例 2:

輸入:[

['1','1','0','0','0'],

['1','1','0','0','0'],

['0','0','1','0','0'],

['0','0','0','1','1']

]輸出: 3

解釋: 每座島嶼只能由水平和/或豎直方向上相鄰的陸地連線而成。

using namespace std;

#include#include#includeint parent[250001];

int find(int x)

return parent[x];

}bool union(int x,int y)

if(dx>dy)

else

return false;

}int numislands(vector>& grid)

int clen=grid[0].size();

for(int i=0;ius;

for(int i=0;i>rlen>>clen;

vectortemp(clen,'0');

vector> grid(rlen,temp);

for(int i=0;i>grid[i][j];

} }

cout<}

並查集系列

並查集類似靜態鍊錶,使用陣列實現,元素的值就是指標指向,即父結點。每個集合中選出乙個代表,這個代表就是這棵樹中的根。每個元素指向其父親,根節點的值指向自己。並查集樹的表示 並查集的基本操作 1.void makeset int s 建立乙個並查集,其中包含s個單元素集合 2.int find int...

並查集演算法

所謂並查集,它是乙個集合,這個集合的元素也是集合,他支援三種操作 makeset x 建立乙個只有乙個元素x的集合x0,將這個集合放入並查集中 findset x 在並查集中尋找乙個元素s 注意並查集的元素s也是集合 滿足 x屬於s union x,y 將並查集中的元素s1,s2合併,其中x屬於s1...

並查集演算法

並查集是一種樹型的資料結構,用於處理一些不相交集合 disjoint sets 的合併及查詢問題。常常在使用中以森林來表示。讓每個元素構成乙個單元素的集合,也就是按一定順序將屬於同一組的元素所在的集合合併。1 makeset s 建立乙個新的並查集,包含s個單元素集合。2 union x,y 把x ...