//
// Created by zhengwei.
//
#include <iostream>
#include <vector>
#include <set>
#define maxn 100
using namespace std;
vector<int> parent(maxn);
//初始化:全部是独立节点
void init() {
for (int i = 0; i < maxn; ++i) {
parent[i] = i;
}
}
int find(int x) {
if (parent[x] == x)return x;//到顶
set<int> path;//记录路径上经过的点
while (parent[x] != x){
path.insert(x);
x = parent[x];
}
set<int>::iterator iter = path.begin();
for (; iter!=path.end() ; ++iter) {
parent[*iter]=x;
}//全部指向最顶节点
return x;
}
void merge(int x,int y){
//y的父亲指向x的父亲,现在它们在一棵树上
parent[find(y)]=find(x);
}
int main(int argc, const char * argv[]) {
init();
merge(3,10);
merge(3,9);
merge(9,8);
cout<<parent[3]<<endl;
cout<<parent[8]<<endl;
cout<<parent[9]<<endl;
cout<<parent[10]<<endl;
return 0;
}
基于数组实现并查集
猜你喜欢
转载自blog.csdn.net/zhengwei223/article/details/87366839
今日推荐
周排行