QuickFind.ixx
Quick-Find (eager approach)
Download source code for Visual Studio 2022 in Github
QuickFind.ixx
#include "pch.h"
export module unionfind:quickfind;
import :uf;
import nodes;
import utilitytest;
export class QuickFind : public UnionFind {
public:
virtual ~QuickFind() = default;
QuickFind(const int size, ArrayType& arrayType):UnionFind(size, arrayType)
{
}
int getValue(const int index)
{
return m_nodes[index];
}
void union_nodes(const int a, const int b)
{
const int i = m_nodes.get(a);
const int j = m_nodes.get(b);
for (int idx = 1; idx <= m_nodes.size(); idx++)
if (m_nodes.get(idx) == i) m_nodes[idx] = j;
}
};
UnionFind_model.ixx
module;
#include "pch.h"
export module unionfind;
export import :quickfind;
export import :uf;
UnionFind.ixx
#include "pch.h"
#include <vector>
export module unionfind:uf;
import nodes;
export class UnionFind {
protected:
Nodes m_nodes;
public:
UnionFind(const int size, ArrayType &arrayType ):
m_nodes(arrayType)
{
m_nodes.resize(size);
}
virtual void initialize()
{
assert(m_nodes.size() > 0);
for (int i = m_nodes.firstIndex(); i <= m_nodes.lastIndex(); i++)
m_nodes[i] = i;
}
virtual int getValue(const int index) = 0;
const std::vector<int>& getAllValues() { return m_nodes.getAll(); }
void setAllValuesvector<int>&& values) { m_nodes.setValues(std::move(values); }
constexpr int getSize() const { return m_nodes.size(); }
virtual void union_nodes(const int a, const int b) = 0;
virtual ~UnionFind() = default;
};