#include <iostream>
using namespace std;
int parent[1000], a[1000];
void unionArray(int i, int j) {
int x = parent[i] + parent[j];
if(parent[i] > parent[j]) { // i的節點少
parent[i] = j;
parent[j] = x;
} else {
parent[j] = i;
parent[i] = x;
}
}
int find(int i) {
int j = i;
while (parent[j] > 0) {
j = parent[j];
}
int k = i;
while (parent[k] > 0) {
int temp = parent[k];
parent[k] = j;
k = temp;
}
return j;
}
int main() {
int size = 10;
for (int i = 1; i < size; ++i) {
parent[i] = -1;
}
unionArray(find(1), find(2));
unionArray(find(2), find(3));
for (int j = 1; j < size; ++j) {
cout << parent[j] << endl;
}
return 0;
}
不相交集合的合併
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.