Mam drzewo bezkierunkowe, którego wierzchołki chcę opisać. Węzły liści powinny być oznaczone jako jeden. Następnie załóżmy, że liście zostały usunięte. W drzewie, które pozostaje, liście powinny być oznaczone jako dwa. Proces ten trwa w oczywisty sposób, dopóki wszystkie wierzchołki nie będą miały etykiety. Powodem tego jest to, że chcę przechowywać wierzchołki w kolejce i przechodzić przez nie „najpierw wychodzi”. Czy istnieje prosty sposób na wykonanie tego czasu ?
Mogę rozwiązać problem, wykonując BFS na każdym kroku. Ale w najgorszym przypadku na każdym kroku przechodzę przez każdy wierzchołek, usuwam dokładnie dwa liście i umieszczam je w kolejce. Uważam, że zajmuje to kwadratowy czas.
Innym pomysłem było najpierw znaleźć wszystkie liście, a następnie wykonać BFS z każdego liścia. To nie daje mi pożądanego rozwiązania. Rozważmy na przykład rodzaj „wykresu korony”, jak na poniższym rysunku. Pokazane jest pożądane rozwiązanie, ale uruchomienie BFS z każdego liścia spowoduje użycie tylko dwóch etykiet.
Idealnie algorytm czasu liniowego byłby również łatwy do wyjaśnienia i wdrożenia.
źródło
Prosta odpowiedź jest następująca:
Topologicznie posortuj wykres.
źródło