Алгоритм поиска лишних ребер в графе или дереве
Поскольку статья в Википедии, упомянутая algorithm-design @Craig, дает только представление language-independent о реализации, я публикую algorithms свою реализацию с потоками algorithms Java 8:
Map> reduction = usages.entrySet().stream()
.collect(toMap(
Entry::getKey,
(Entry> entry) -> {
String start = entry.getKey();
Set neighbours = entry.getValue();
Set visited = new HashSet<>();
Queue queue = new LinkedList<>(neighbours);
while (!queue.isEmpty()) {
String node = queue.remove();
usages.getOrDefault(node, emptySet()).forEach(next -> {
if (next.equals(start)) {
throw new RuntimeException("Cycle detected!");
}
if (visited.add(next)) {
queue.add(next);
}
});
}
return neighbours.stream()
.filter(s -> !visited.contains(s))
.collect(toSet());
}
));
algorithm
language-agnostic
tree
graph-theory
2021-12-14T15:08:58+00:00
2022-09-05T00:30:54+00:00
DunklanMaklauud
Вопросы с похожей тематикой, как у вопроса:
Алгоритм поиска лишних ребер в графе или дереве
Предупреждение о файлах Cookies
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.