並查集主要用於判斷圖的聯通性以及判環等問題的解決。
並查集的定義
父陣列,儲存當前下標對應的父節點編號。
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 ...