Autor : David Ježek , L95624


Prohledávání do šířky

Nalezení nejkratší cesty pomocí prohledávání grafu do šířky

Nalezení nejkratší cesty pomocí prohledávání grafu do šířky se realizuje v těchto krocích: začneme ve výchozím uzlu u[v] a prozkoumáme všech sousední uzly (všechny uzly pro které můžeme zlepšit cenu pomocí trojůhelníkové nerovnosti, tuto cenu zlepšíme a přídáme je do fronty). Pak se přesuneme do uzlu na začátku fronty a vše opakujeme. Tento algoritmus můžeme ukončit v různých situacích:
kdyľ dojdeme do předem vybraného vrcholu.
když je fronta prázdná(prozkoumali jsme jednu souvislou komponentu).

Algoritmus:

Budeme používat pole cen C, kde si uložíme cenu nejlevnější cesty. Dále použijeme frontu F, kam budeme postupně ukládat procházené uzly (konkrétně jejich indexy).

 

1. Inicializace - C[v] := 0; C[i] := MAXFLOAT pro všechna i mimo i <>V, kde v je index výchozího uzlu. Do fronty vložíme index výchozího vrcholu.

2.Pro všechny sousedy u[k] uzlu u[i] ze začátku fronty, pro který můžeme zlepšit cenu pomocí trojůhelníkové nerovnosti C[k] > C[i]+c[ki], provedeme {C[k]=C[i]+c[ki]}, a vložíme je do fronty.

3. Je-li fronta prázdná přejdeme na bod 4, jinak pokračujeme bodem 2.

4. Koneck

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.