Algorytm Dijkstry (przykład) Będziemy wyznaczać najkrótsze ścieżki pomiędzy wyróżnionym wierzchołkiem (źródłem), a wszystkimi pozostałymi wierzchołkami w grafie. V = {1,2,3,4,5,6} E = {(1-2,3),(1-4,3),(2-3,2),(3-1,6),(3-6,1),(4-5,1),(5-3,1),(5-6,2),(6-4,3)}
Algorytm Dijkstry (przykład CD.) Tworzymy dwa zbiory S (wierzchołki, dla których są policzone najkrótsze ścieżki) oraz Q (wierzchołki jeszcze nie przetworzone). Zbiór S jest początkowo pusty. Zbiór Q obejmuje wszystkie wierzchołki grafu.
Algorytm Dijkstry (przykład KROK 1/7) Dla każdego wierzchołka v ustawiamy d(v) ← ∞. Dla wybranego wierzchołka vo ustawiamy d(vo)← 0. Ustawiamy również p(v) ← 0. indeks 1 2 3 4 5 6 d(indeks) ∞ p(indeks)
Algorytm Dijkstry (przykład KROK 2/7) W zbiorze Q szukamy wierzchołka o najmniejszym d - wierzchołek 1 - przenosimy go do zbioru S. Następnie sprawdzamy wartość d jego sąsiadów (wierzchołki 2 i 4). Jeśli ich d jest większe od kosztu d(1) + w(1,v), to modyfikujemy d i p dla tych wierzchołków. indeks 1 2 3 4 5 6 d(indeks) ∞ p(indeks)
Algorytm Dijkstry (przykład KROK 3/7) W zbiorze Q szukamy wierzchołka o najmniejszym d. Są dwa takie wierzchołki: 2 i 4 o d=3. Wybieramy arbitralnie wierzchołek nr 2 i przenosimy go do zbioru S. Wierzchołek 2 posiada tylko jednego sąsiada - 3. Modyfikujemy odpowiednio d[3] i p[3] indeks 1 2 3 4 5 6 d(indeks) ∞ p(indeks)
Algorytm Dijkstry (przykład KROK 4/7) W zbiorze Q szukamy wierzchołka o najmniejszym d. Teraz jest to wierzchołek 4 o d[4] = 3. Przenosimy go do zbioru S. Wierzchołek 4 posiada tylko jednego sąsiada - 5. Modyfikujemy odpowiednio d[5] i p[5]. indeks 1 2 3 4 5 6 d(indeks) ∞ p(indeks)
Algorytm Dijkstry (przykład KROK 5/7) W zbiorze Q szukamy wierzchołka o najmniejszym d. Jest to wierzchołek 5 o d[5] = 4. Przenosimy go do zbioru S. Wierzchołek 5 posiada dwóch sąsiadów: 3 i 6. Ponieważ d[3]=5 jest takie samo jak d[5] + waga(5-3) = 4+1=5, nie modyfikujemy parametrów d i p dla wierzchołka 3. Do modyfikacji jest tylko wierzchołek 6. indeks 1 2 3 4 5 6 d(indeks) p(indeks)
Algorytm Dijkstry (przykład KROK 6/7) W zbiorze Q szukamy wierzchołka o najmniejszym d. Jest to wierzchołek 3 o d[3] = 5. Przenosimy go do zbioru S. Wierzchołek 3 posiada dwóch sąsiadów: 1 i 6. Ponieważ wierzchołek 1 jest już w zbiorze S, to nie bierzemy go pod uwagę. Drugi wierzchołek posiada d[6]=6, czyli takie samo jak d[3]+waga(3-6)=5+1=6. Nie modyfikujemy zatem wierzchołka 6. indeks 1 2 3 4 5 6 d(indeks) p(indeks)
Algorytm Dijkstry (przykład KROK 7/7) Do zbioru S przenosimy ostatni wierzchołek z Q. Wierzchołek ten nie posiada sąsiadów w Q połączonych z nim krawędzią, dlatego nic nie modyfikujemy. Ponieważ zbiór Q stał się pusty, algorytm kończymy. indeks 1 2 3 4 5 6 d(indeks) p(indeks)