Mam takie coś:
Wierzchołkiem rozdzielającym w spójnym grafie nazywamy wierzchołek, którego usunięcie rozspójnia graf.
Mamy graf dany przez listy sąsiedztwa.
a) Jak znaleźć dowolny wierzchołek, który nie rozspójnia. (szybko)
Obliczam stopnie dla każdego wierzchołka.
Do usunięcia wskazuję wierzchołek stopnia 1. Jeśli takiego nie ma, to wskazuje dowolny (bo leży na cyklu).
b)
Jak efektywnie wyznaczyć kolejność usuwania wierzchołków grafu, tak że żadne usunięcie nie rozspójni grafu.
Kod: Zaznacz cały
1. Obliczam stopnie wszystkich wierzchołków i wsadzam do kolejki priorytetowej typu min. Niech to będzie kopiec fib.
while kolejka nie jest pusta
wyciągnij węzeł o najmniejszym stopniu
wszystkim jego sąsiadom zmniejsz stopien (operacje Decrease-key)
Całość działa w złożoności takiej jak Alg. Dijsktry: \(\displaystyle{ O(|V|\log(V) +|E|)}\) - zamortyzowany.
Ok ? Może ktoś lepiej potrafi ?