# Úloha minimální cesty

**Algoritmus**: Minimální cesta z vrcholu $x$ do vrcholu $y$ - **E. W. Dijkstra**.

- Vstup: ohodnocený orientovaný graf $\vec{G}$, vrcholy $x$ a $y$.
1. Vrcholu $x$ přiřaď trvalou hodnotu $t(x) = 0$, ostatním vrcholům dočasnou hodnotu $\infty$ - horní hranice délky.
2. Je-li $u$ poslední vrchol. jemuž byla přiřazena trvalá hodnota $t(u)$, pak všem vrcholům $v$, pro něž $(u, v) \in E(\vec{G})$ a které ještě nemají trvalou hodnotu, přiřaď novou dočasnou hodnotu $d(v) = min\{ d(v), t(u) + w(u, v) \}$
3. Pro vrchol $w$ s nejmenší dočasnou hodnotou polož $t(w) = d(w)$.
4. Má vrchol $y$ trvalou hodnotu? Pokud ne, jdi na krok 2. Pokud ano, $t(y)$ je délka minimální cesty z $x$ do $y$, konec.

**Poznámka**: Hrany, na nichž $w(x, y) = t(y) - t(x)$ určují minimální cestu.

## Úloha APSP - all pairs shortest paths

**Algoritmus**: Floydův-Warshallův

- Slouží k získání $w$-distanční matice grafu $\vec{G}$, začíná se ze stejné matice $D_{0}(\vec{G})$.
- Vstup: matice $D_{0}(\vec{G})$ ohodnoceného orientovaného grafu $\vec{G}$.
1. Potřebujeme se zbavit míst s nekonečnem a to provedeme tak, že hledáme minimální cestu z vrcholu $i$ do $j$ přes libovolný třetí vrchol $k$.
2. Vybereme si jedno z těchto míst a matici čteme takto: potřebujeme se dostat z vrcholu $i$ (určen řádky) do vrcholu $j$ (určen sloupci).
3. Najdeme tedy vrchol $k$, do kterého se dostaneme z $i$ a ze kterého se dostaneme do $j$. Na místo v matici poté zapíšeme součet těchto ohodnocení, pokud je menší než současná hodnota.
4. Pokračujeme u všech prázných míst a poté postupně u všech míst, dokud po zpracování celé matice nedojde k žádné změně.

