@@ -198,6 +198,19 @@ bool MaxClique::Calculate()
198198 FindMaxClique (m_param_algorithm_type);
199199 }
200200
201+ // If no clique found, we return clique with one vertex.
202+ if (m_max_clique.empty ())
203+ {
204+ if (m_pGraph->GetNodesCount () > 0 && m_param_expected_size != 0 )
205+ {
206+ m_max_clique.emplace_back (m_pGraph->GetNode ((IndexType)0 ));
207+ }
208+ else if (m_param_expected_size == 0 )
209+ { // If expected size is 0, we return empty clique.
210+ m_max_clique.clear ();
211+ }
212+ }
213+
201214 if (m_max_clique.size () != m_param_expected_size && m_param_expected_size != m_index_type_no_value)
202215 {
203216 LOG_WARNING (" Max Clique size " << m_max_clique.size () << " is "
@@ -295,7 +308,7 @@ void MaxClique::UnitTest() const
295308 {
296309 if (u != v)
297310 {
298- if (not m_pGraph-> AreNodesConnected (v, u))
311+ if (! AreNodesConnected (v, u))
299312 {
300313 oss << " Invalid Clique! No edge between " << v << " and " << u;
301314 throw std::runtime_error (oss.str ().c_str ());
@@ -693,7 +706,7 @@ std::vector<ObjectId> MaxClique::VertexNeighbours(ObjectId v, const std::vector<
693706
694707 for (ObjectId u : neighbours)
695708 {
696- if (m_pGraph-> AreNodesConnected (v, u))
709+ if (AreNodesConnected (v, u))
697710 {
698711 new_neighbours.emplace_back (u);
699712 }
@@ -716,7 +729,7 @@ std::vector<MaxClique::ColourType> MaxClique::SortByGreedyColours(std::vector<Ob
716729 {
717730 ColourType colour = 0 ;
718731 while (std::any_of (colour_classes[colour].begin (), colour_classes[colour].end (),
719- [&v, this ](ObjectId u) { return m_pGraph-> AreNodesConnected (u, v); }))
732+ [&v, this ](ObjectId u) { return AreNodesConnected (u, v); }))
720733 {
721734 colour++;
722735 }
0 commit comments