1. Vytvořte třídu `Map`, která implementuje hledání nejkratší cesty v grafu pomocí Dijkstrova algoritmu.
1. Vytvořte třídu `Map`, která implementuje hledání nejkratší cesty v grafu pomocí Dijkstrova algoritmu.
2. Otestujte pomocí dodaných testerů (tzn. svůj kód pište přímo do dodaného souboru a následně zkuste spustit, dokud to neprojde bez chyb).
2. Otestujte pomocí dodaných testerů na malém grafu několika měst (tzn. svůj kód pište přímo do dodaného souboru a následně zkuste spustit, dokud to neprojde bez chyb).
3. Implementujte naplnění jiné mapy dodanými linkami tramvají a prověřte funkčnosti dodanými testery (v souboru až za seznamy stanic tram linek).
3. Implementujte naplnění další mapy dodanými linkami tramvají a prověřte funkčnosti dodanými testery (v souboru až za seznamy stanic tram linek).
*Zdrojový kód pro implementaci a testování*: link:route_zadani.py[route_zadani.py] zde na gitlabu.
## Třída `Map`
## Třída `Map`
@@ -31,7 +33,7 @@
- Vrátí dvojici `(dist, route)`, kde `dist` je hodnota nejkratší vzdálenosti mezi `start` a `end`
- Vrátí dvojici `(dist, route)`, kde `dist` je hodnota nejkratší vzdálenosti mezi `start` a `end`
a `route` jen seznam (`list`) uzlů od `start` do `end` (včetně) tvořící nejkratší cestu (názvy uzlů vše malými písmeny).
a `route` jen seznam (`list`) uzlů od `start` do `end` (včetně) tvořící nejkratší cestu (názvy uzlů vše malými písmeny).
- Pokud cesta neexistuje, vraťte `(None, [])`.
- Pokud cesta neexistuje, vraťte `(None, [])` (volitelné).
- Pokud `start` nebo `end` v mapě neexistuje, vyhoďte výjimku `ValueError` s vhodným textem.
- Pokud `start` nebo `end` v mapě neexistuje, vyhoďte výjimku `ValueError` s vhodným textem.
## Poznámky k implementaci třídy
## Poznámky k implementaci třídy
@@ -44,6 +46,7 @@ m = dict()
m["Praha"] = dict()
m["Praha"] = dict()
m["Praha"]["Brno"] = 200
m["Praha"]["Brno"] = 200
----
----
- Takto s tím můžete pracovat podobně jako s 2D polem, ale indexy jsou stringy.
- Při implementaci nepoužívejte žádné globální proměnné (vše, co budete používat, je třeba mít uvnitř třídy).
- Při implementaci nepoužívejte žádné globální proměnné (vše, co budete používat, je třeba mít uvnitř třídy).
- Při použití slovníků se může hodit metoda `.get()` (více v dokumentaci Pythonu).
- Při použití slovníků se může hodit metoda `.get()` (více v dokumentaci Pythonu).