270 likes | 349 Views
E N D
Az ábrán az inicializáló blokk lefutása utáni állapotot láthatjuk. A KÉSZ halmazhoz való tartozást színezéssel valósítjuk meg. A nem KÉSZ csúcsok fehérek, a KÉSZ csúcsok zöldek lesznek. A csúcsok mellé feltüntettem a címkéjét és a csúcson belüli érték jelöli az eddig talált legrövidebb távolságot. Kezdetben a szürke kezdőcsúcs értéke 0 a többi csúcs végtelen (inf) értékkel szerepel az elsőbbségi sorban (minQ).
A főciklus működése. Ciklusfeltétel teljesül, minQ nem üres, belépés a ciklusba
Első lépésben kivesszük a prioritásos sorból az a csúcsot, (mivel az ő prioritása a legkisebb).
Az a csúcshoz már ki van számítva a legrövidebb út , tehát ez a csúcs már elkészült , tegyük bele a KÉSZ U halmazba.
Az a csúcs kiterjesztését végző ciklus működése. A ciklus végigmegy a gráf összes olyan elemén, amely szomszédja az u csúcsnak és nincs benne a KÉSZ halmazban. A kiterjesztés során vizsgált csúcsokat és éleket pirossal jelöltem.
A legrövidebb csúcs megkeresése. A d[…] tömbbe kerülnek az u csúcsból kiinduló élek távolságai. c(u,v) jelöli az u csúcsból a v csúcsba vezető él súlyát. Behelyettesítve az értékeket : inf > 0 + 54 Igaz ág hajtódik végre.
A v csúcs távolsága legyen egyenlő az u csúcs értékével és a két csúcs közötti él súlyával (c(u,v) függvény).
d[v] = inf d[u] = 0 c(u,v)=62 Behyelyettesítve az értékeket az igaz ág kerül végrehajtásra.
d[v] = inf d[u] = 0 c(u,v)=37 Behyelyettesítve az értékeket az igaz ág kerül végrehajtásra.
A belső ciklus lefutása utáni állapot. A kezdőcsúcshoz tartozó három él közül az e csúcshoz vezető él a legkisebb súlyú, ez került a minQ prioritásos sor legelejére.
A főciklus második lefutása. minQ első elemét kivesszük, ez jelen esetben az e csúcs
Betesszük a KÉSZ U{} halmazba, melynek elemeit az ábrán zölden jelöltem.
A belső ciklus nem fut le mert az u-hoz tartozó szomszédsági lista üres.
A főciklus harmadik lefutása. minQ első elemét kivesszük, ez jelen esetben a d csúcs és beletesszük a KÉSZ U{} halmazba.
A belső ciklus lefutása utáni állapot. Az f csúcshoz vezető út súlya: 54+76=130, mert a d csúcsnak csak egyetlen szomszédos eleme van, amely nincs benne a KÉSZ U{} halmazban, ennek értéke hozzáadódik a d csúcshoz vezető él súlyához.
A főciklus negyedik lefutása. minQ első elemét kivesszük, ez jelen esetben a b csúcs és beletesszük a KÉSZ U{} halmazba.
b csúcs kiterjesztése utáni állapot. Mivel b-nek csak egyetlen olyan szomszédos eleme van, amely nincs benne a KÉSZ U{} halmazban, ezért a belső ciklus csak egyszer fut le. d[v] értéke 62+15=77 lesz és ezt teszi be a minQ prioritásos sorba.
A főciklus ötödik lefutása. minQ első elemét kivesszük, ez jelen esetben a ccsúcs és beletesszük a KÉSZ U{} halmazba.
A kiterjesztés során f csúcshoz két különbözűélsúlyú út is tartozik. Egyszer a korábbi 54+76=130 és a mostani kiterjesztés során bejárt 77+92=169 Ebben az esetbe a SKIP ág hajtódik végre, a 169 nem került bele minQ-ba.