演算法筆記 並查集

2021-09-30 18:14:59 字數 812 閱讀 4641

先給出源**和輸入輸出測試結果:

#includeusing namespace std;

const int n = 110;

int father[n];//存放父親節點

bool isboot[n];//標記時否為根節點

int findfather(int x)

return x;

}void union(int a, int b)

void init(int n)

}int main(void)

for (int i = 1; i <= n; i++)

int ans = 0;

for (int i = 1; i <= n; i++)

ans += isboot[i];

cout << "輸出根節點:";

for (int i = 1; i <= n; i++)

if (i == father[i])

cout << i<

cout << endl;

cout << "組數:"<

路徑壓縮:就是把當前查詢節點的路徑上所有的節點的父親都指向根節點,複雜度可以降為o(1)

非遞迴:

int findfather(int x)

return x;

}

遞迴:

int findfather(int v)

}

演算法筆記 並查集

專題 並查集 一 引入 在一些有n個元素的集合應用問題中,我們通常是在開始時讓每個元素構成乙個單元素的集合,然後按一定順序將屬於同一組的元素所在的集合合併,其間要反覆查詢乙個元素在哪哪個集合中。該問題看似並不複雜,但資料量極大,若用正常的資料結構來描述的話,往往超過了空間的限制,計算機無法承受 而且...

並查集演算法筆記

並查集是一種用來管理元素分組情況的資料結構,並查集可以高效的進行如下操作 使用樹狀結構來實現 在樹形資料結構中,如果發生了退化的情況,複雜度就會變得很高。在並查集中,可以按照如下方法避免退化 並查集複雜度平均下來每次查詢和合併的複雜度都是常數的 阿克曼函式 leetcode 547.friend c...

《演算法筆記》9 6 並查集

一.定義 實現 int father n father i j 表示 j 的父親結點是 i father i i 表示元素 i 是該集合的根結點 二.基本操作 1.初始化 for int i 1 i n i father i i 2.查詢 非遞迴實現 int findfather int x 遞迴實...