一、STL::map实现并查集
测试结果
代码
实现思路见 此处——并查集
#include <iostream>
#include <map>
#include <stack>
#include <vector>
using namespace std;
struct Node {
int _i; // whatever type u want
Node(int x) : _i(x) {
}
Node() : _i(0) {
}
friend bool operator!=(const Node &a, const Node &b) {
return (a._i != b._i); }
friend bool operator==(const Node &a, const Node &b) {
return (a._i == b._i); }
friend bool operator<(const Node &a, const Node &b) {
return (a._i < b._i); }
};
class UnionFindSet {
public:
UnionFindSet(const vector<Node> &Nodes) {
makeSet(Nodes); // 注意:不应有重复的node
}
bool isInSameSet(const Node &a, const Node &b) {
return (findRootUnRecur(a) == findRootUnRecur(b));
}
void Union(const Node &a, const Node &b) {
Node rootA = findRootUnRecur(a);
Node rootB = findRootUnRecur(b);
if (rootA != rootB) {
int sizeA = sizeMap[rootA];
int sizeB = sizeMap[rootB];
if (sizeA <= sizeB) {
fatherMap[rootA] = rootB;
sizeMap[rootB] = (sizeA + sizeB);
}
else {
fatherMap[rootB] = rootA;
s