Autor : David Ježek , L95624
Prohledávání do hloubky
Nalezení nejkratší cesty pomocí prohledávání grafu do hloubky
Nalezení nejkratší cesty pomocí prohledávání grafu do hloubky se realizuje v
těchto krocích: začneme ve výchozím uzlu u[v] a přejdeme do kterehokoliv
sousedního uzlu splňujícího běžnou trojůhelníkovou nerovnost. U tohoto uzlu
změníme cenu a testujeme, jestli můžeme pokračovat v procházení grafu tak
abychom zlepšily minimální ceny. Pokud ano, přesunem se do dalšího uzlu, u
kterého si také změníme cenu. Pokud nejsou v okolí vrcholu dosud uzly u kterých
bychom mohli zlepšit cenu, vracíme se zpět a testujeme okolí dřívějších uzlů.
Tento algoritmus můžeme ukončit v různých situacích:
kdyľ dojdeme do předem
vybraného vrcholu.
když se vrátíme zpět do výchozího uzlu (prozkoumali jsme
jednu souvislou komponentu).
Algoritmus:
Budeme používat pole cen C, kde si uložíme cenu nejlevnější cesty. Dále použijeme zásobník Z, kam budeme postupně ukládat procházené uzly (konkrétně jejich indexy) a zpět se po nich vracet.
1. Inicializace - C[v] := 0; C[i] := MAXFLOAT pro všechna i mimo i <>V, kde v je index výchozího uzlu. Na zásobník vložíme index výchozího vrcholu.
2. Hledáme sousední uzlu u[k] k uzlu na vrcholu zásobníku, pro který můžeme
zlepšit cenu pomocí trojůhelníkové nerovnosti C[k] > C[i]+c[ki], pak
{C[k]=C[i]+c[ki]}, a vložíme k na zásobník.
Pokud neexistuje hrana splňující
tuto podmínku Odebereme vrchol zásobníku.
3. Je-li zásobník prázdný přejdeme na bod 4, jinak pokračujeme bodem 2.
4. Konec
Může se použít také pole Pu pokud chceme znát přesný sled hran které tvoří
nejkratší cestu. Hodnota MAXFLOT je brána jako nekonečno a předpokládá se, že
při výpočtu (sčítání, násobení) tato hodnota nebude dosažena. Dále je zde
použito pole delka[99] ktere reprezentuje počet hran nejlevnější cesty pro daný
uzel, pokud pro nějaký uzel překročí toto číslo celkový počet hran grafu, pak v
grafu existuje kružnice se zápornou cenou a algoritmus končí.
Pole cen je
vyplněno hodnotami MAXFLOAT pouze pro počáteční uzel je hodnota 0 . Dále
algoritmus pokračuje podle výše uvedeného postupu.
Algoritmus označí všechny uzly dosažitelné z počátečního a vypíše minimálni cenu za kterou je možno se do uzlu dostat.