27 if ( startPointIdx < 0 || startPointIdx >= source->
vertexCount() )
33 QVector< double > *result =
nullptr;
40 result =
new QVector<double>();
44 result->insert( result->begin(), source->
vertexCount(), std::numeric_limits<double>::infinity() );
45 ( *result )[ startPointIdx ] = 0.0;
50 resultTree->insert( resultTree->begin(), source->
vertexCount(), -1 );
55 QMultiMap< double, int > not_begin;
56 QMultiMap< double, int >::iterator it;
58 not_begin.insert( 0.0, startPointIdx );
60 while ( !not_begin.empty() )
62 it = not_begin.begin();
63 double curCost = it.key();
64 int curVertex = it.value();
65 not_begin.erase( it );
69 for (
int edgeId : outgoingEdges )
72 double cost = arc.
cost( criterionNum ).toDouble() + curCost;
74 if ( cost < ( *result )[ arc.
toVertex()] )
79 ( *resultTree )[ arc.
toVertex()] = edgeId;
81 not_begin.insert( cost, arc.
toVertex() );
99 QVector<int> source2result( tree.size(), -1 );
102 source2result[ startVertexIdx ] = treeResult->
addVertex( source->
vertex( startVertexIdx ).
point() );
106 if ( tree[ i ] != -1 )
115 if ( tree[ i ] != -1 )