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())
|
||||
{
|
||||
super::RoutingStep(forward_core_heap, reverse_core_heap, &middle, &distance,
|
||||
min_edge_offset, true);
|
||||
min_edge_offset, true, false);
|
||||
}
|
||||
if (!reverse_core_heap.Empty())
|
||||
{
|
||||
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,
|
||||
int *upper_bound,
|
||||
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 int distance = forward_heap.GetKey(node);
|
||||
@ -99,25 +100,28 @@ template <class DataFacadeT, class Derived> class BasicRoutingInterface
|
||||
}
|
||||
|
||||
// Stalling
|
||||
for (const auto edge : facade->GetAdjacentEdgeRange(node))
|
||||
if (stalling)
|
||||
{
|
||||
const EdgeData &data = facade->GetEdgeData(edge);
|
||||
const bool reverse_flag = ((!forward_direction) ? data.forward : data.backward);
|
||||
if (reverse_flag)
|
||||
{
|
||||
const NodeID to = facade->GetTarget(edge);
|
||||
const int edge_weight = data.distance;
|
||||
for (const auto edge : facade->GetAdjacentEdgeRange(node))
|
||||
{
|
||||
const EdgeData &data = facade->GetEdgeData(edge);
|
||||
const bool reverse_flag = ((!forward_direction) ? data.forward : data.backward);
|
||||
if (reverse_flag)
|
||||
{
|
||||
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.GetKey(to) + edge_weight < distance)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (forward_heap.WasInserted(to))
|
||||
{
|
||||
if (forward_heap.GetKey(to) + edge_weight < distance)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (const auto edge : facade->GetAdjacentEdgeRange(node))
|
||||
|
Loading…
Reference in New Issue
Block a user