Topological sort: Difference between revisions

Content added Content deleted
m (→‎{{header|C++}}: Minor reorder of operations)
m (→‎{{header|C++}}: Renamed variables, for clarity)
Line 686: Line 686:
{
{
auto const&
auto const&
key = lookup.first,
goal = lookup.first,
goal = lookup.second;
relations = lookup.second;
if(goal.dependencies == 0)
if(relations.dependencies == 0)
sorted.push_back(key);
sorted.push_back(goal);
}
}
for(std::size_t index = 0; index < sorted.size(); ++index)
for(std::size_t index = 0; index < sorted.size(); ++index)
for(auto const& key : map[sorted[index]].dependents)
for(auto const& goal : map[sorted[index]].dependents)
if(--map[key].dependencies == 0)
if(--map[goal].dependencies == 0)
sorted.push_back(key);
sorted.push_back(goal);
for(auto const& lookup : map)
for(auto const& lookup : map)
{
{
auto const&
auto const&
key = lookup.first,
goal = lookup.first,
goal = lookup.second;
relations = lookup.second;
if(goal.dependencies != 0)
if(relations.dependencies != 0)
unsortable.push_back(key);
unsortable.push_back(goal);
}
}
}
}