Suppress relaxation of edges on the top level during backward steps
This commit is contained in:
parent
8300a6c57e
commit
5af05631c2
@ -33,6 +33,9 @@ inline LevelID getNodeQueryLevel(const MultiLevelPartition &partition,
|
|||||||
const auto node_level = std::min(highest_diffrent_level(phantom_node.forward_segment_id),
|
const auto node_level = std::min(highest_diffrent_level(phantom_node.forward_segment_id),
|
||||||
highest_diffrent_level(phantom_node.reverse_segment_id));
|
highest_diffrent_level(phantom_node.reverse_segment_id));
|
||||||
|
|
||||||
|
if (DIRECTION == REVERSE_DIRECTION && node_level >= partition.GetNumberOfLevels() - 1)
|
||||||
|
return INVALID_LEVEL_ID;
|
||||||
|
|
||||||
return node_level;
|
return node_level;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -79,12 +82,17 @@ void relaxOutgoingEdges(const DataFacade<mld::Algorithm> &facade,
|
|||||||
BOOST_ASSERT(!facade.ExcludeNode(node));
|
BOOST_ASSERT(!facade.ExcludeNode(node));
|
||||||
|
|
||||||
const auto &partition = facade.GetMultiLevelPartition();
|
const auto &partition = facade.GetMultiLevelPartition();
|
||||||
|
|
||||||
|
const auto level = getNodeQueryLevel<DIRECTION>(partition, node, args...);
|
||||||
|
|
||||||
|
// Break outgoing edges relaxation if node at the restricted level
|
||||||
|
if (level == INVALID_LEVEL_ID)
|
||||||
|
return;
|
||||||
|
|
||||||
const auto &cells = facade.GetCellStorage();
|
const auto &cells = facade.GetCellStorage();
|
||||||
const auto &metric = facade.GetCellMetric();
|
const auto &metric = facade.GetCellMetric();
|
||||||
const auto &node_data = query_heap.GetData(node);
|
const auto &node_data = query_heap.GetData(node);
|
||||||
|
|
||||||
const auto level = getNodeQueryLevel<DIRECTION>(partition, node, args...);
|
|
||||||
|
|
||||||
if (level >= 1 && !node_data.from_clique_arc)
|
if (level >= 1 && !node_data.from_clique_arc)
|
||||||
{
|
{
|
||||||
const auto &cell = cells.GetCell(metric, level, partition.GetCell(level, node));
|
const auto &cell = cells.GetCell(metric, level, partition.GetCell(level, node));
|
||||||
|
Loading…
Reference in New Issue
Block a user