先給出源**和輸入輸出測試結果:
#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 遞迴實...