Hledání nejkratší cesty a Dijkstrův algoritmus
- Dijkstrův algoritmus je jeden z nejznámějších algoritmů hledání nejkratší cesty
 
- Na vstupu: je neorientovaný graf , jeho hranové ohodnocení a vrchol
 - Výstupem: pro každý vrchol číslo , které je vzdáleností z do .
 - Algoritmus používá proměnné: ,
- a označují množiny vrcholů
 - označuje funkci přiřazující vrcholům kladná reálná čísla
 - označuje nezáporné reálné číslo.
 
 - V každém kroku algoritmu je pro vrchol hodnota rovna délce nejkratší zatím nalezené cesty z do .
 
- Na začátku se nastaví  a  pro ostatní vrcholy .
- Hodnota znamená, že žádná cesta do zatím nebyla nalezena. Tato hodnota se pak u vrcholů, do kterých existuje cesta z , v průběhu výpočtu zmenšuje, v každém kroku obsahuje délku nejkratší zatím nalezené cesty z do , a na konci délku nejkratší cesty z do .
 - U vrcholů , do kterých cesta z nevede, zůstává .
 - Množina se na začátku nastaví na . Během výpočtu obsahuje vrcholy , pro něž zatím nebyla stanovena konečná hodnota (tj. byla stanovena, ale v dalším výpočtu se ještě může změnit).
 
 - Algoritmus opakuje následující kroky:
- Zjistí nejmenší hodnotu  vrcholů z . Množinu vrcholů  z  s touto nejmenší hodnotou označí . Z množiny  vyjme všechny vrcholy , pro které je  nejmenší.
- Vrchol se tedy odstraní z a vloží do , právě když .
 
 - Každý takový vrchol je pak považován za vrchol, pro nějž byla nalezena nejkratší cesta z do , délkou této cesty je , a kratší cesta do se v dalších krocích algoritmu už nehledá (to je zajištěno tím, že se vrchol odstranil z ).
 - Vložení vrcholu do znamená, že je považován za vrchol, přes který může do zbývajících vrcholů množiny vést kratší cesta, než je dosud nalezená nejkratší cesta do . V tomto smyslu je tedy každý vrchol z kandidátem na zlepšení hodnoty .
 - Algoritmus toto možné zlepšení prověří pro vrcholy z , do kterých vede z hrana. Algoritmus tedy pro každý a pro každý , pro který existuje hrana , porovná hodnotu (délka možné cesty z s do u, která vede přes v) s hodnotou (délka dosud nejkratší nalezené cesty z do ).
 - Je-li (tj. cesta přes v je kratší), změní se hodnota .
 - Algoritmus se pak vrátí ke kroku 2. V něm se ověří, zda je v ještě nějaký vrchol s hodnotou . Pokud ano, znamená to, že v se nacházejí kandidáti na zlepšení hodnot a pokračuje se znovu jako výše, tedy stanovením nové množiny , odebráním vrcholů z a tak dále. Pokud ale v žádný vrchol s hodnotou není, algoritmus skončí.
 - Na konci je množina buď prázdná, a to tehdy, když ke všem vrcholům z cesta existuje, nebo je neprázdná, a obsahuje jen vrcholy s hodnotou . Vrcholy s hodnotou jsou právě ty, ke kterým z s neexistuje cesta.
 
 - Zjistí nejmenší hodnotu  vrcholů z . Množinu vrcholů  z  s touto nejmenší hodnotou označí . Z množiny  vyjme všechny vrcholy , pro které je  nejmenší.
 
Algoritmus
- Vstup: Graf , vrchol , hranové ohodnocení
 - Výstup: Hodnota pro každý , je délka nejkratší cesty z do
 - Proměnné: Funkce , číslo , množiny
 - Postup:
- ; pro každý
 - Pokud neexistuje takový, že , skonči
 - Pro všechny takové, že jestliže pak pokračuj krokem
 
 
Navigace
Předchozí: Orientované a neorientované grafy, základní pojmy Následující: Minimální kostra grafu, Kruskalův algoritmus Celý okruh: 1. Teoretické základy informačních technologií