Strona główna Algorytmy i SI Algorytm Bellmana-Forda — najkrótsze ścieżki z ujemnymi wagami

🗺️ Algorytm Bellmana-Forda — najkrótsze ścieżki z ujemnymi wagami

Obserwuj, jak Bellman-Ford relaksuje każdą krawędź V−1 razy, by znaleźć najkrótsze ścieżki od źródła, nawet z ujemnymi wagami, a następnie wykonuje jeszcze jeden przebieg, by wykryć ujemne cykle.

Algorytmy i SI2DZaawansowany60 FPS
bellman-ford ↗ Otwórz samodzielnie
Interfejs symulacji jest w języku angielskim — sterowanie odbywa się bezpośrednio w oknie symulacji (przeciąganie, przewijanie, kliknięcie).

O tej symulacji

Algorytm Bellmana-Forda, opracowany niezależnie przez Richarda Bellmana (1958) i Lestera Forda Jr. (1956), oblicza najkrótsze ścieżki od pojedynczego wierzchołka źródłowego do wszystkich pozostałych wierzchołków w ważonym grafie skierowanym. W przeciwieństwie do algorytmu Dijkstry toleruje ujemne wagi krawędzi.

🔬 Co pokazuje

Ważony graf skierowany, na którym każda krawędź jest relaksowana w kolejnych przebiegach, aż wszystkie odległości od źródła się ustabilizują.

🎮 Jak korzystać

Wybierz przykładowy graf i uruchom algorytm w trybie automatycznym lub krok po kroku, obserwując aktualizacje odległości przy każdej relaksacji.

💡 Czy wiesz, że…

Dodatkowy, V-ty przebieg po wszystkich krawędziach służy wyłącznie do wykrywania ujemnych cykli — jeśli którakolwiek odległość nadal może się poprawić, graf zawiera cykl o ujemnej wadze osiągalny ze źródła.

Często zadawane pytania

Dlaczego Bellman-Ford potrzebuje V−1 przebiegów?

Ponieważ najdłuższa możliwa najkrótsza ścieżka w grafie z V wierzchołkami (nie powtarzająca wierzchołka) może mieć co najwyżej V−1 krawędzi. Każdy pełny przebieg po wszystkich krawędziach gwarantuje, że co najmniej jedna kolejna krawędź na każdej najkrótszej ścieżce zostanie ustalona.

Jak Bellman-Ford wykrywa ujemne cykle?

Po wymaganych V−1 przebiegach algorytm wykonuje jeszcze jeden przebieg po wszystkich krawędziach. Jeśli którąkolwiek krawędź nadal można zrelaksować, oznacza to istnienie cyklu o ujemnej wadze osiągalnego ze źródła.

Jak Bellman-Ford wypada w porównaniu z algorytmem Dijkstry?

Oba obliczają najkrótsze ścieżki z jednego źródła, ale Dijkstra używa zachłannej kolejki priorytetowej i wymaga nieujemnych wag, działając w czasie O((V+E) log V). Bellman-Ford relaksuje każdą krawędź w każdym przebiegu, toleruje ujemne wagi i wykrywa ujemne cykle, kosztem wolniejszego czasu O(V·E).

Czy Bellman-Ford radzi sobie z grafami nieskierowanymi z ujemnymi krawędziami?

Nie. Każda nieskierowana krawędź o ujemnej wadze jest równoważna dwuwierzchołkowemu ujemnemu cyklowi (u→v i v→u), więc Bellman-Ford natychmiast oznaczyłby ją jako ujemny cykl.

Powiązane symulacje