Ну, если вы хотите удалить все циклы, то у вас получится дерево.Поэтому независимо от того, какой алгоритм вы используете, вы удалите | E |- (n -1) ребер.(если это было правильно, конечно)
Однако вопрос заключается в том, приведет ли удаление ребер к отключенному графу.Для этого вам нужно будет упорядочить края (скажем, лексикографический порядок).Затем вы должны всегда удалять самое большое ребро в цикле.[Полагаю, доказательство правильности очень прямое: просто используйте алгоритм Крускала и найдите, что они будут одинаковыми!]
Любой алгоритм связующего дерева решит проблему за вас.В зависимости от того, что вы хотите оптимизировать (сложность времени или сообщений или любой другой показатель производительности), вы найдете разные алгоритмы.BFS - лучшее времяНи один алгоритм не может решить эту проблему для сообщения c (logn + m) при c> 0.
Существует алгоритм, который мне нравится использовать для DAG, называется YO-YO.Описание алгоритма можно найти в: http://www.site.uottawa.ca/~flocchin/CSI4509/8-yoyo11_fr.pdf