// ========================================================================= // @author Leonardo Florez Valencia // @email florez-l@javeriana.edu.co // ========================================================================= #ifndef __fpa__DataStructures__MinimumSpanningTree__h__ #define __fpa__DataStructures__MinimumSpanningTree__h__ #include namespace fpa { namespace DataStructures { /** */ template< class _TVertex, class _Superclass > class MinimumSpanningTree : public _Superclass { public: typedef MinimumSpanningTree Self; typedef _Superclass Superclass; typedef itk::SmartPointer< Self > Pointer; typedef itk::SmartPointer< const Self > ConstPointer; typedef _TVertex TVertex; typedef std::pair< TVertex, bool > TCollision; typedef std::vector< TCollision > TCollisionsRow; typedef std::vector< TCollisionsRow > TCollisions; typedef std::vector< TVertex > TVertices; protected: typedef std::vector< unsigned long > _TRow; typedef std::vector< _TRow > _TMatrix; public: itkTypeMacro( fpa::Base::MinimumSpanningTree, _Superclass ); public: const TCollisions& GetCollisions( ) const; void SetCollisions( const TCollisions& collisions ); void ClearSeeds( ); void AddSeed( const TVertex& seed ); virtual TVertex GetParent( const TVertex& v ) const = 0; virtual void SetParent( const TVertex& v, const TVertex& p ) = 0; virtual TVertices GetPath( const TVertex& a ) const; virtual TVertices GetPath( const TVertex& a, const TVertex& b ) const; protected: MinimumSpanningTree( ); virtual ~MinimumSpanningTree( ); private: MinimumSpanningTree( const Self& other ); Self& operator=( const Self& other ); protected: TCollisions m_Collisions; _TMatrix m_FrontPaths; std::vector< TVertex > m_Seeds; }; } // ecapseman } // ecapseman #ifndef ITK_MANUAL_INSTANTIATION # include #endif // ITK_MANUAL_INSTANTIATION #endif // __fpa__DataStructures__MinimumSpanningTree__h__ // eof - $RCSfile$