Две разные вершины в ориентированном графе сильно связаны, если в графе есть путь от одного к другому. Сильно компонента связности графы является подмножеством графа таким образом, что каждая пара различных вершин в подгруппе сильно связана, и добавление каких - либо больше вершин к подмножеству бы нарушить это свойство.
Ваша задача состоит в том, чтобы разделить график на его сильно связанные компоненты. В частности, вы должны вывести все SCC на графике.
I / O:
В качестве входных данных вы можете использовать список направленных ребер, список смежности, матрицу смежности или любой другой приемлемый формат ввода. Спросите, если вы не уверены. Вы можете предположить, что граф не имеет полностью несвязных вершин и что нет собственных ребер, но вы не можете делать никаких дополнительных предположений. Вы также можете при желании принять список вершин в качестве входных данных, а также количество вершин.
В качестве выходных данных вы должны либо дать разбиение вершин, например, список списков вершин, где каждый подсписок является сильно связным компонентом, либо метку вершин, где каждая метка соответствует отдельному компоненту.
Если вы используете метки, метки должны быть либо вершинами, либо последовательной последовательностью целых чисел. Это сделано для того, чтобы избежать смещения вычислений в метки.
Примеры:
В этих примерах используются списки ребер, где каждое ребро направлено от 1-й записи ко второй записи, и выходные разделы. Вы можете использовать этот формат или другой.
Вход находится в первой строке, выход - во второй.
[[1, 2], [2, 3], [3, 1], [1, 4]]
[[1, 2, 3], [4]]
[[1, 2], [2, 3], [3, 4]]
[[1], [2], [3], [4]]
[[1, 2], [2, 1], [1, 3], [2, 4], [4, 2], [4, 3]]
[[1, 2, 4], [3]]
[[1, 2], [2, 3], [2, 5], [2, 6], [3, 4], [3, 7], [4, 3], [4, 8], [5, 1], [5, 6], [6, 7], [7, 6], [8, 7], [8, 4]]
[[1, 2, 5], [3, 4, 8], [6, 7]]
Подсчет очков и ограничения:
Стандартные лазейки , как всегда, запрещены. Кроме того, встроенные модули, которые специально работают с сильно связанными компонентами, запрещены.
Решения должны выполняться не более часа на предоставленных примерах. (Это предназначено для предотвращения медленных экспоненциальных решений и ничего больше.)
Это код гольф. Побеждает несколько байтов.
8
не в компоненте, [3,4]
потому что он не может только каждый 6
и7
(ни один из которых не достигает его).