Don't use stalling in core search
This commit is contained in:
parent
78283a0e0e
commit
fd84827e51
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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))
|
||||||
|
Loading…
Reference in New Issue
Block a user