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;
	};