Dwa różne wierzchołki na ukierunkowanym wykresie są silnie połączone, jeśli na wykresie jest ścieżka od siebie do siebie. Silnie związany komponent wykresu jest podzbiorem wykresie tak, że każda para różnych wierzchołków w podgrupie są mocno połączone, oraz przez dodanie więcej wierzchołków podzbioru pęknie tę właściwość.
Wyzwanie polega na rozdzieleniu wykresu na jego silnie połączone komponenty. W szczególności musisz wyprowadzić wszystkie SCC na wykresie.
I / O:
Jako dane wejściowe możesz użyć listy skierowanych krawędzi, listy sąsiedztwa, macierzy sąsiedztwa lub innego rozsądnego formatu wejściowego. Zapytaj, jeśli nie jesteś pewien. Możesz założyć, że wykres nie ma całkowicie odłączonych wierzchołków i że nie ma żadnych krawędzi własnych, ale nie możesz przyjmować żadnych dalszych założeń. Opcjonalnie możesz również wziąć listę wierzchołków jako dane wejściowe, a także liczbę wierzchołków.
Jako wynik musisz podać partycję wierzchołków, na przykład listę list wierzchołków, gdzie każda podlista jest silnie połączonym składnikiem, lub etykietę wierzchołków, gdzie każda etykieta odpowiada innemu składnikowi.
Jeśli używasz etykietowania, etykiety muszą być wierzchołkami lub kolejną liczbą całkowitą. Ma to na celu uniknięcie rozplątywania obliczeń na etykietach.
Przykłady:
Te przykłady pobierają listy krawędzi, gdzie każda krawędź jest kierowana od pierwszego wpisu do drugiego wpisu, i partycje wyjściowe. Możesz używać tego formatu lub innego.
Dane wejściowe znajdują się w pierwszym wierszu, dane wyjściowe w drugim wierszu.
[[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]]
Punktacja i ograniczenia:
Standardowe luki są jak zawsze zakazane. Również wbudowane, które konkretnie dotyczą silnie połączonych komponentów są zabronione.
Rozwiązania powinny działać w nie więcej niż godzinę na podanych przykładach. (Ma to na celu zapobieganie powolnym wykładniczym rozwiązaniom i nic więcej.)
To jest kod golfowy. Wygrywa najmniej bajtów.
8
nie ma go w komponencie, [3,4]
ponieważ nie może on tylko każdego z nich ( 6
i 7
żaden z nich nie osiągnie tego).