Fixing corner case in contractor which may have lead to an incorrect

path with correct distance. Thx @DennisSchiefer
This commit is contained in:
DennisOSRM 2012-10-01 16:15:55 +02:00
parent db9292ee86
commit 62f31f3e2d

View File

@ -376,7 +376,7 @@ public:
for ( int i = 0; i < ( int ) data.insertedEdges.size(); ++i ) {
const _ContractorEdge& edge = data.insertedEdges[i];
_DynamicGraph::EdgeIterator currentEdgeID = _graph->FindEdge(edge.source, edge.target);
if(currentEdgeID != _graph->EndEdges(edge.source)) {
if(currentEdgeID != _graph->EndEdges(edge.source) && _graph->GetEdgeData(currentEdgeID).shortcut) {
_DynamicGraph::EdgeData & currentEdgeData = _graph->GetEdgeData(currentEdgeID);
if(edge.data.forward == currentEdgeData.forward && edge.data.backward == currentEdgeData.backward ) {
if(_graph->GetEdgeData(_graph->FindEdge(edge.source, edge.target)).distance <= edge.data.distance) {
@ -388,7 +388,7 @@ public:
}
}
}
_graph->InsertEdge( edge.source, edge.target, edge.data );
_graph->InsertEdge( data.insertedEdges[i].source, data.insertedEdges[i].target, data.insertedEdges[i].data );
}
data.insertedEdges.clear();
}