#ifndef ISOLATES_H #define ISOLATES_H #include "Set.h" #include "ArraySet.h" #include "SparseArraySet.h" #include #include #include #include #include ////#define TIMERS ////#define SPARSE template class Isolates2 { public: Isolates2(std::vector> const &adjacencyArray); ~Isolates2(); void RemoveVertexAndNeighbors(int const vertex, std::vector &vRemoved); void RemoveVertex(int const vertex); void RemoveAllIsolates(int const independentSetSIze, std::vector &vIsolateVertices, std::vector &vOtherRemovedVertices, std::vector> &vAddedEdges, bool const bConsiderAllVertices); void ReplaceAllRemoved(std::vector const &vRemoved); int NextVertexToRemove(std::vector &vVertices); int NextVertexToRemove(); size_t size() const { return isolates.Size(); } ArraySet const& GetIsolates() const { return isolates; } ArraySet const& GetInGraph() const { return inGraph; } #ifdef SPARSE std::vector const& Neighbors() const { return neighbors; } #else std::vector const& Neighbors() const { return neighbors; } #endif //SPARSE //// void RemoveEdges(std::vector> const &vEdges); int GetAlternativeVertex(int const vertex) const; void SetConnectedComponent(std::vector const &vVertices); protected: // methods bool RemoveIsolatedClique (int const vertex, std::vector &vIsolateVertices, std::vector &vOtherRemovedVertices); //// bool RemoveIsolatedPath (int const vertex, std::vector &vIsolateVertices, std::vector &vOtherRemovedVertices, std::vector> &vAddedEdges); protected: // members std::vector> const &m_AdjacencyArray; #ifdef SPARSE std::vector neighbors; #else std::vector neighbors; #endif // SPARSE ArraySet inGraph; ArraySet isolates; ArraySet remaining; std::vector vMarkedVertices; std::map m_AlternativeVertices; #ifdef TIMERS clock_t timer; clock_t removeTimer; clock_t replaceTimer; clock_t sortDuringNextTimer; clock_t removeOneDuringNextTimer; clock_t removeDuringNextTimer; clock_t replaceDuringNextTimer; #endif // TIMERS bool m_bConnectedComponentMode; }; #endif //ISOLATES_H