X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2Ffpa%2FBase%2FMinimumSpanningTree.hxx;h=d932247c7bc2dcbc739e5902848da20879509bb5;hb=b4ed6ddfa7e90e892f07cad9a760961bd4e84e6b;hp=1140e4022f717616c2aadee581d2898a1488962d;hpb=db33ebb226fd58f493b7db245fc8b807f895ee6e;p=FrontAlgorithms.git diff --git a/lib/fpa/Base/MinimumSpanningTree.hxx b/lib/fpa/Base/MinimumSpanningTree.hxx index 1140e40..d932247 100644 --- a/lib/fpa/Base/MinimumSpanningTree.hxx +++ b/lib/fpa/Base/MinimumSpanningTree.hxx @@ -56,7 +56,6 @@ SetCollisions( const TCollisions& collisions ) } // rof } // rof - this->Modified( ); } @@ -65,8 +64,14 @@ template< class V, class C, class B > void fpa::Base::MinimumSpanningTree< V, C, B >:: GetPath( std::vector< V >& path, const V& a, const V& b ) const { - long fa = this->_FrontId( a ); - long fb = this->_FrontId( b ); + typename TDecorated::const_iterator aIt = this->Get( ).find( a ); + typename TDecorated::const_iterator bIt = this->Get( ).find( b ); + + if( aIt == this->Get( ).end( ) || bIt == this->Get( ).end( ) ) + return; + + short fa = aIt->second.second; + short fb = bIt->second.second; if( fa == fb ) { @@ -164,14 +169,20 @@ template< class V, class C, class B > void fpa::Base::MinimumSpanningTree< V, C, B >:: _Path( std::vector< V >& path, const V& a ) const { - V it = a; - do + typename TDecorated::const_iterator dIt = this->Get( ).find( a ); + if( dIt != this->Get( ).end( ) ) { - path.push_back( it ); - it = this->_Parent( it ); + do + { + path.push_back( dIt->first ); + dIt = this->Get( ).find( dIt->second.first ); - } while( it != this->_Parent( it ) ); - path.push_back( it ); + } while( dIt->first != dIt->second.first && dIt != this->Get( ).end( ) ); + + if( dIt != this->Get( ).end( ) ) + path.push_back( dIt->first ); + + } // fi } #endif // __FPA__BASE__MINIMUMSPANNINGTREE__HXX__