====== Orientované grafy ====== {{ http://upload.wikimedia.org/wikipedia/commons/thumb/7/77/DirectedDegrees.svg/300px-DirectedDegrees.svg.png}} [[wp>Directed graph]] **Orientovaný graf** //G// = (//U//, //H//) * **//U//** je konečná množina uzlů * **//H//** je konečná množina uspořádaných dvojic určující orientované hrany mezi uzly **Ohodnocený orientovaný graf** je orientovaný graf vbe kterém mají hrany přiřazené váhy. Můžeme zde hovořit o vstupním a výtupním [[wp>Degree (graph theory)|stupni uzlu]], viz graf napravo. ===== Orientované cesty a kružnice ===== ===== Souvislost a silná souvislost ===== Orientovaný graf je **souvislý**, pokud nemá izolované podgrafy (komponenty), je to prostě jeden ucelený graf. Jinak řečeno, pokud odstraníme orientace hran a dostaneme //souvislý obyčejný graf//, je i orientovaný graf //souvislý//. Orientovaný graf je **silně souvislý**, pokud mezi každými dvěma uzly existuje orientovaná cesta. ===== Turnaj ===== [[wp>Tournament (graph theory)]] Když vezmeme [[wp>Complete graph|úplný neorientovaný graf]] a libovolně mu "zorientujeme" hrany, dostáváme **turnaj**. ===== Eulerovský graf ===== **[[wp>Eulerian path|Eulerovský tah]]** (kružnice) je takový tah který každou hranou projde právě jednou. Pokud dokážeme v grafu najít Eulerovský tah, je to **Eulerovký graf**. Jinak řečeno je to graf který dokážeme nakreslit jedním tahem. Nutnou podmínkou pro existenci eulrovské kružnice je, aby [[wp>Degree (graph theory)|stupeň]] každého uzlu byl sudý. ===== Dijkstrův a Floyd-Warshallův algoritmus pro hledání cesty minimální délky ===== ==== Dijkstrův algoritmus ==== {{ http://upload.wikimedia.org/wikipedia/commons/4/45/Dijksta_Anim.gif}} **[[wp>Dijkstra's algorithm]]** - Nastav každému uzlu vzdálenost. Počátečnímu 0, všem ostatním ∞. Označ všechny uzly jako nenavštívené. - Najdi nenavštívený uzel s nejmenší známou vzdáleností a označ ho jako aktuální. Uvažuj všechny jeho nenavštívené sousedy. - Spočítej vzdálenosti k sousedům jako známá vzdálenost aktuálního uzlu + ohodnocení hrany k sousedovi. Pokud je vypočtená vzdálenost menší než známá vzdálenost souseda, použij místo ní novou vypočtenou vzdálenost. - Označ aktuální uzel za navštívený a pokračuj na 2. Dijkstrův algoritmus nefunfguje se zápornými hranami! ==== Floyd-Warshallův algoritmus ==== [[wp>Floyd–Warshall algorithm]], http://students.ceid.upatras.gr/~papagel/english/java_docs/allmin.htm procedure FloydWarshall() for k := 1 to n for i := 1 to n for j := 1 to n path[i][j] = min(path[i][j], path[i][k] + path[k][j]); Pokud je na diagonále záporné číslo, je v grafu záporná smyčka!