Дві чіткі вершини в спрямованому графіку сильно пов'язані, якщо в графі є шлях один від одного. Сильно компонента зв'язності графи є підмножиною графа таким чином, що кожна пара різних вершин в підгрупі сильно пов'язана, і додавання будь - яких більше вершин до подмножеству б порушити це властивість.
Ваше завдання полягає в тому, щоб розділити графік на його сильно пов'язані компоненти. Зокрема, ви повинні вивести всі SCC на графіку.
I / O:
В якості введення можна використовувати список спрямованих країв, список суміжності, матрицю примикання або будь-який інший розумний формат введення. Запитайте, чи не впевнені ви. Ви можете припустити, що на графіку немає повністю відключених вершин і що немає власних країв, але ви не можете робити жодних подальших припущень. Ви також можете взяти список вершин як вхідні, а також кількість вершин.
Як вихід, ви повинні дати розподіл вершин, наприклад, список списків вершин, де кожен підпис є сильно з'єднаним компонентом, або маркування вершин, де кожна мітка відповідає іншому компоненту.
Якщо ви використовуєте маркування, мітки повинні бути або вершинами, або послідовною послідовністю цілих чисел. Це робиться для того, щоб запобігти зачистці обчислень на етикетках.
Приклади:
Ці приклади беруть списки ребер, де кожен край спрямований від першого запису до другого запису, і виводять розділи. Ви можете використовувати цей чи інший формат.
Вхід знаходиться на першому рядку, вихід - на другому рядку.
[[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
(жоден з яких досягти цього).