14 using namespace shogun;
28 m_num_elements = num_elements;
33 void CDisjointSet::init()
40 m_is_connected =
false;
46 REQUIRE(m_num_elements > 0,
"%s::make_sets(): m_num_elements <= 0.\n",
get_name());
54 ASSERT(x >= 0 && x < m_num_elements);
65 ASSERT(xroot >= 0 && xroot < m_num_elements);
66 ASSERT(yroot >= 0 && yroot < m_num_elements);
67 ASSERT(m_parent[xroot] == xroot && m_parent[yroot] == yroot);
71 if (m_rank[xroot] > m_rank[yroot])
73 m_parent[yroot] = xroot;
78 m_parent[xroot] = yroot;
79 if (m_rank[xroot] == m_rank[yroot])
88 ASSERT(x >= 0 && x < m_num_elements);
89 ASSERT(y >= 0 && y < m_num_elements);
103 ASSERT(x >= 0 && x < m_num_elements);
104 ASSERT(y >= 0 && y < m_num_elements);
114 REQUIRE(m_num_elements > 0,
"%s::get_unique_labeling(): m_num_elements <= 0.\n",
get_name());
116 if (out_labels.
size() != m_num_elements)
122 int32_t unilabel = 0;
124 for (int32_t i = 0; i < m_num_elements; i++)
128 if (flags[roots[i]] < 0)
129 flags[roots[i]] = unilabel++;
132 for (int32_t i = 0; i < m_num_elements; i++)
133 out_labels[i] = flags[roots[i]];
140 REQUIRE(m_num_elements > 0,
"%s::get_num_sets(): m_num_elements <= 0.\n",
get_name());
147 return m_is_connected;
152 m_is_connected = is_connected;