Don't use stalling in core search

This commit is contained in:
Patrick Niklaus 2015-10-08 22:11:34 +02:00
parent 78283a0e0e
commit fd84827e51
2 changed files with 23 additions and 19 deletions

View File

@ -194,12 +194,12 @@ class DirectShortestPathRouting final
if (!forward_core_heap.Empty()) if (!forward_core_heap.Empty())
{ {
super::RoutingStep(forward_core_heap, reverse_core_heap, &middle, &distance, super::RoutingStep(forward_core_heap, reverse_core_heap, &middle, &distance,
min_edge_offset, true); min_edge_offset, true, false);
} }
if (!reverse_core_heap.Empty()) if (!reverse_core_heap.Empty())
{ {
super::RoutingStep(reverse_core_heap, forward_core_heap, &middle, &distance, super::RoutingStep(reverse_core_heap, forward_core_heap, &middle, &distance,
min_edge_offset, false); min_edge_offset, false, false);
} }
} }

View File

@ -64,7 +64,8 @@ template <class DataFacadeT, class Derived> class BasicRoutingInterface
NodeID *middle_node_id, NodeID *middle_node_id,
int *upper_bound, int *upper_bound,
const int min_edge_offset, const int min_edge_offset,
const bool forward_direction) const const bool forward_direction,
const bool stalling=true) const
{ {
const NodeID node = forward_heap.DeleteMin(); const NodeID node = forward_heap.DeleteMin();
const int distance = forward_heap.GetKey(node); const int distance = forward_heap.GetKey(node);
@ -99,25 +100,28 @@ template <class DataFacadeT, class Derived> class BasicRoutingInterface
} }
// Stalling // Stalling
for (const auto edge : facade->GetAdjacentEdgeRange(node)) if (stalling)
{ {
const EdgeData &data = facade->GetEdgeData(edge); for (const auto edge : facade->GetAdjacentEdgeRange(node))
const bool reverse_flag = ((!forward_direction) ? data.forward : data.backward); {
if (reverse_flag) const EdgeData &data = facade->GetEdgeData(edge);
{ const bool reverse_flag = ((!forward_direction) ? data.forward : data.backward);
const NodeID to = facade->GetTarget(edge); if (reverse_flag)
const int edge_weight = data.distance; {
const NodeID to = facade->GetTarget(edge);
const int edge_weight = data.distance;
BOOST_ASSERT_MSG(edge_weight > 0, "edge_weight invalid"); BOOST_ASSERT_MSG(edge_weight > 0, "edge_weight invalid");
if (forward_heap.WasInserted(to)) if (forward_heap.WasInserted(to))
{ {
if (forward_heap.GetKey(to) + edge_weight < distance) if (forward_heap.GetKey(to) + edge_weight < distance)
{ {
return; return;
} }
} }
} }
}
} }
for (const auto edge : facade->GetAdjacentEdgeRange(node)) for (const auto edge : facade->GetAdjacentEdgeRange(node))