předchozí - obsah části - obsah - další | dotazy/odpovědi

Hledání nejkratší cesty (Dijsktra)

Upravte program vytvořený v předchozí úloze tak, aby ilustroval činnost Dijkstrova algoritmu.

Dijkstrův algoritmus pracuje v hranově ohodnoceném grafu, kde nalezne pro zadaný výchozí uzel vzdálenosti (délky nejkratších cest) k ostatním uzlům. Výsledkem tedy je seznam dvojic (cílový uzel, vzdálenost od výchozího uzlu do tohoto cílového).

Výchozí uzel buďto nechejte vybrat uživateli - zadáním jeho názvu, výběrem ze seznamu (listu),.. anebo zvolte napevno např. první uzel.

Provedení v GUI je na vás - je možné např. pouze do grafického rozhraní dát tlačítko, po jehož stisku (stisk vyvolá událost typu ActionEvent) budou vzdálenosti spočteny a vypsány na konzolu (na příkazový řádek) nebo přímo do GUI.

pozn.: Dijkstrův algoritmus najdete např. na slidech IB002 (Návrh algoritmů I),
na starších materiálech I065 (Seminář z návrhu algoritmů), v ukázkových programech na http://www.fi.muni.cz/~tomp/java/demo1/ nebo na mnoha místech Internetu, např. v projektu OpenJGraph - http://openjgraph.sourceforge.net/, hezké podrobné a jednoduché vysvětlení najdete na http://renaud.waldura.com/doc/java/dijkstra.shtml, stručné vysvětlení i s důkazem na http://ciips.ee.uwa.edu.au/~morris/Year2/PLDS210/dijkstra.html, další na http://www.cs.brown.edu/cgc/jdsl/explorations/dijkstra/, kde je i zdrojový kód.

pozn.: Jedinou "záhadnou" věcí se může jevit použití prioritní fronty, což je struktura, která zajistí efektivní nalezení následujícího pivota, tj. uzlu, který má z těch, co dosud nebyly pivoty, nejmenší vzdálenost od vstupního uzlu. Prioritní frontu však lze (s jistou ztrátou efektivity) nahradit v Javě obyčejnou mapou, která mapuje uzly na jejich momentální odhady vzdáleností od výchozího uzlu. Tuto mapu můžeme při každé volbě pivota sekvenčně projít a vybrat uzel s nejmenší vzdáleností.

Dijkstrův algoritmus bude také zopakován na přednášce (stihlo se bohužel jen na úterní).

Jako bonus je možno zvýraznit (např. jinou barvou) do grafu ty hrany, které leží na nejkratších cestách z výchozího uzlu.

Obecné informace

Jako alternativu je možné zadat hledání vzdáleností Warshallovým algoritmem.

pozn: Pokud cvičící zadání modifikuje, je to OK. Tohle je vzorové minimální zadání.

za tuto úlohu dohromady získáte max. 4 body.


předchozí - obsah části - obsah - další | dotazy/odpovědi
Slidy předmětu byly navštíveny krát.