Najkrótsza ścieżka w grafie Algorytm Dijkstry Grafy Najkrótsza ścieżka w grafie Algorytm Dijkstry
Najkrótsza ścieżka w grafie Algorytm Dijkstry algorytmDijkstry(ważony prosty digraf, wierzchołek pierwszy) for wszystkich wierzchołków v aktOdległość(pierwszy)=0; doSprawdzenia=wszystkie wierzchołki; while doSprawdzenia nie jest pusty v=wierzchołek z doSprawdzenia o minimalnej wartości aktOdległość(v); usuń v z doSprawdzenia; for wszystkich wierzchołków u siąsiadujących z v i będących w doSprawdzenia if aktOdległość(u)>aktOdległość(v)+waga(krawęź(vu)) aktOdległość(u=aktOdległość(v)+waga(krawęź(vu)); poprzednik(u)=v;
Przykład Start 1 – koniec 6 2 3 4 5 6 8 j – wierzchołek tj – tymczasowa droga minimalna do wierz. j popj – wierzcholek poprzedni do wierz. j wierzch. Nr j przed iter. popj tj 1 0 2 ∞ 3 ∞ 4 5 6
Przykład 1 2 3 4 5 6 8 wierzch. Nr j przed iter. popj tj 1 0 2 ∞ 0+1 3 ∞ 0+2 4 0+8 5 6 Szukamy sąsiadów dla wierzchołka 1 W tabelce w tj wpisujemy wartość drogi tymczasowej. W kolumnie popj wpisujemy etykietę wierzchołka poprzedniego.
Przykład 1 2 3 4 5 6 8 wierzch. Nr j przed iter. popj tj 1 0 2 ∞ 3 ∞ 4 8 1+3=4 5 - 6 Wybieramy wartość najmniejszą w tj i wierzchołek usuwamy ze zbioru doSprawdzenia i szukamy sąsiadów tego wierzchołka Tam gdzie się nic nie zmienia przepisujemy poprzednią wartość
Przykład tj =2, j=3 1 2 3 4 5 6 8 wierzch. Nr j przed iter. popj tj 1 popj tj 1 0 2 ∞ 3 ∞ 4 8 2+1 5 - 2+2 6
Przykład tj =3, j=4 1 2 3 4 5 6 8 wierzch. Nr j przed iter. popj tj 1 popj tj 1 0 2 ∞ 3 ∞ 4 8 5 - 6 3+8=11
Przykład tj =3, j=4 2 1 3 5 8 4 6 1 1 3 3 5 2 2 2 wierzch. Nr j przed iter. popj tj 1 0 2 ∞ 3 ∞ 4 8 5 - 6 11 4+2
Przykład 1 2 3 4 5 6 8 wierzch. Nr j przed iter. popj tj 1 0 2 ∞ 3 ∞ 4 popj tj 1 0 2 ∞ 3 ∞ 4 8 5 - 6
Bibliografia A. Drozdek, „C++. Algorytmy i struktury danych”, Helion, Gliwice 2004;