90 likes | 311 Views
Dijkstra algoritmus. Algoritmus és adatszerkezet 2010. Tavaszi félév. Feladat:. Keressük meg egy irányított gráfban a legrövidebb utakat egy adott csúcsból kiindulva. Az élek súlya pozitív érték. ∞. ∞. 3. A. D. 3. 4. 1. 2. E. 0. S. 5. ∞. 2. 2. B. C. 7. ∞. ∞. 1. lépés.
E N D
Dijkstra algoritmus Algoritmus és adatszerkezet 2010. Tavaszi félév Tóth Norbert
Feladat: • Keressük meg egy irányított gráfban a legrövidebb utakat egy adott csúcsból kiindulva. Az élek súlya pozitív érték. ∞ ∞ 3 A D 3 4 1 2 E 0 S 5 ∞ 2 2 B C 7 ∞ ∞
1. lépés Keressük meg a legkisebb csúcsot, ez lesz a kezdőpont. Ebből a pontból minden lehetséges úton elindulva eljutunk a szomszédjaihoz. A szomszéd csúcsok indexben szereplő értékét átállítjuk a csúcshoz vezető él értékére. 4 ∞ 3 A D 3 4 1 2 E 0 S 5 ∞ 2 2 B C 7 2 ∞
Azok közül a csúcsok közül, ahova eljutottunk, kiválasztjuk a kisebbet és elindulunk a szomszédjaiba. Ha olyan csúcshoz jutunk, ahol már jártunk előzőleg (a csúcs indexe nem végtelen, hanem a kezdőpontból a pontba vezető élek összege), akkor megvizsgáljuk, hogy a jelenlegi érték kisebb-e mint a csúcsból kiinduló új út összege. Ha igen, átállítjuk az index értékét. 3 7 3 A D 3 4 1 2 E 0 S 5 ∞ 2 2 B C 7 2 9
Vizsgáljuk a D csúcsba futó élek súlyát! 3 3 6 6 3 3 Vizsgáljuk az E csúcsba futó élek súlyát! A A D D 3 3 4 4 1 1 2 2 E E 0 0 S S 5 5 ∞ 9 2 2 2 2 B B C C 7 7 2 2 9 9
3 3 6 6 3 3 A A D D 3 3 4 4 1 1 2 2 E E 0 0 S S 5 5 9 9 2 2 2 2 B B C C 7 7 2 2 9 9
A teljes gráf bejárásával kijelölhetünk egy feszítőfát, amely meghatározza a kezdőcsúcsból kiinduló legrövidebb utat. 3 6 3 A D 3 4 1 2 E 0 S 5 9 A Dijkstra-algoritmusa futás során a G gráf minden egyes v csúcspontjára nyilvántartja az s csúcspont és v közötti , a futás során addig legrövidebbnek talált út költségét. 2 2 B C 7 2 9