#include <algorithm>
// -------------------------------------------------------------------------
-template< class V, class C, class R, class VC, class B >
-fpa::Base::Dijkstra< V, C, R, VC, B >::
+template< class V, class C, class R, class S, class VC, class B >
+fpa::Base::Dijkstra< V, C, R, S, VC, B >::
Dijkstra( )
- : Superclass( )
+ : Superclass( ),
+ m_LocalCosts( false )
{
}
// -------------------------------------------------------------------------
-template< class V, class C, class R, class VC, class B >
-fpa::Base::Dijkstra< V, C, R, VC, B >::
+template< class V, class C, class R, class S, class VC, class B >
+fpa::Base::Dijkstra< V, C, R, S, VC, B >::
~Dijkstra( )
{
}
// -------------------------------------------------------------------------
-template< class V, class C, class R, class VC, class B >
-bool fpa::Base::Dijkstra< V, C, R, VC, B >::
+template< class V, class C, class R, class S, class VC, class B >
+bool fpa::Base::Dijkstra< V, C, R, S, VC, B >::
_ComputeNeighborResult(
TResult& result, const TVertex& neighbor, const TVertex& parent
) const
if( result >= TResult( 0 ) )
{
_TNode pn = this->_Node( parent );
- if( pn.Label == Self::AliveLabel )
+ if( pn.Label == Self::AliveLabel && !this->m_LocalCosts )
result += pn.Result;
return( true );
}
}
// -------------------------------------------------------------------------
-template< class V, class C, class R, class VC, class B >
-bool fpa::Base::Dijkstra< V, C, R, VC, B >::
+template< class V, class C, class R, class S, class VC, class B >
+bool fpa::Base::Dijkstra< V, C, R, S, VC, B >::
_IsQueueEmpty( ) const
{
return( this->m_Queue.empty( ) );
}
// -------------------------------------------------------------------------
-template< class V, class C, class R, class VC, class B >
-void fpa::Base::Dijkstra< V, C, R, VC, B >::
+template< class V, class C, class R, class S, class VC, class B >
+void fpa::Base::Dijkstra< V, C, R, S, VC, B >::
_QueuePush( const TVertex& v, const _TNode& n )
{
_TQueueNode qn;
}
// -------------------------------------------------------------------------
-template< class V, class C, class R, class VC, class B >
-void fpa::Base::Dijkstra< V, C, R, VC, B >::
+template< class V, class C, class R, class S, class VC, class B >
+void fpa::Base::Dijkstra< V, C, R, S, VC, B >::
_QueuePop( TVertex& v, _TNode& n )
{
_TQueueNode qn = this->m_Queue.front( );
}
// -------------------------------------------------------------------------
-template< class V, class C, class R, class VC, class B >
-void fpa::Base::Dijkstra< V, C, R, VC, B >::
+template< class V, class C, class R, class S, class VC, class B >
+void fpa::Base::Dijkstra< V, C, R, S, VC, B >::
_QueueClear( )
{
this->m_Queue.clear( );