一、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

本文详细介绍了如何使用STL::map实现并查集,并结合岛问题进行实例解析。首先展示了STL::map实现并查集的测试结果和代码,接着分析了岛问题的两种解法,包括单CPU单内存解法和利用并查集的多任务计算解法,最后探讨了更多并查集问题的应用。

383

被折叠的 条评论
为什么被折叠?



