• No results found

Vytvoření a modifikace grafu

2.7 Interface

2.7.1 Vytvoření a modifikace grafu

Pro jakoukoliv práci s aplikací je vždy potřeba pracovat s již vytvořeným a přesně nadefinovaným grafem. K vytvoření grafu slouží prvky označené červeně a očíslovány čísly „1.x“, na navigačním obrázku 8. Graf je možné vytvořit třemi různými způsoby:

 Ruční vytvoření zcela nového grafu.

 Vytvoření náhodného grafu pomocí generátoru přímo v aplikaci.

 V minulosti vytvořený graf naimportovat nebo ručně sestavit soubor pro import (viz. kapitola 2.6).

Chce-li uživatel vytvořit nový graf, postupuje následovně: V levé horní části se nachází tlačítko „Nový vrchol“ (prvek 1.2, obrázek 8). Po použití tohoto tlačítka program vytvoří vždy nový vrchol grafu a vypíše jej do list boxu „vrcholy“ (prvek 1.6, obrázek 8) pod tímto tlačítkem. Výpis vrcholů je ve formě: “vrchol id-Vrcholu (počet sousedů)“. Přičemž id vrcholu je hodnota auto-inkrementovaná reprezentující pořadové

číslo. Takto vytvořený vrchol nemá žádné sousedící vrcholy ani není sousedícím vrcholem kteréhokoliv jiného vrcholu v grafu. Pro přidání sousedících vrcholů je potřeba v list boxu (prvek 1.6, obrázek 8) „vrcholy“ označit vrchol, pro který bude uživatel sousedy přidávat a poté použít tlačítko „Přidej souseda“(prvek 1.3, obrázek 8).

Okamžitě dojde k vyvolání nového formuláře (viz. obrázek 9), kde je po uživateli požadováno vybrat cílový vrchol (prvek 1, obrázek 9) z množiny již vytvořených vrcholů a kapacitu hrany, která do vrcholu povede (prvek 2, obrázek 9). Vše se potvrdí stisknutím tlačítka „přidej“ (prvek 4, obrázek 9).

Po úspěšném přidání hrany do sousedícího vrcholu, se v list boxu „sousedé“

(prvek 1.6, obrázek 8) vypíše cílový vrchol a kapacita hrany směřující do něj. Výpis všech sousedů se provádí vždy po označení vrcholu v list boxu „vrcholy“. Tímto způsobem uživatel definuje celý graf.

Obrázek 9: Definice souseda

určuje množství hran, které se budou mezi vrcholy generovat. Je možné vybrat jednu ze tří možností: malé, střední nebo velké množství hran (prvek 3, obrázek 10).

Tato volba určuje interval, ve kterém se bude pohybovat množství vygenerovaných sousedních vrcholů na jeden vrchol. Přičemž volba „malé množství“ odpovídá intervalu 1 až 8 hran připadající na jeden vrchol. Pokud je v grafu menší množství vrcholů než 8, bude jako maximální hodnota vybrána polovina počtu vrcholů v grafu. Volba „střední množství“ pracuje s intervalem 5 až 10 hran na vrchol. Pokud je v grafu nedostatek vrcholů pro tento počet hran, nižší hodnota tohoto intervalu je nahrazena polovinou počtu existujících vrcholů a horní hodnota nahrazena 2/3 počtu vrcholů v grafu. „Velké množství“ je volba, které odpovídá počet 8 až 25 hran na jeden vrchol. Pokud je v tomto případě nedostatek vrcholů, použijí se hodnoty 2/3 počtu vrcholů až počet vrcholů mínus jedna.

Po zadání všech potřebných hodnot uživatel pomocí tlačítka „vytvoř“ (prvek 5, obrázek 10) spustí generování náhodného grafu.

Obrázek 10: Generátor grafu

Třetí možnost vytvoření grafu je pomocí tlačítka „import xmg“ vyobrazeném na obrázku 8 jako prvek 1.12, kdy program celý graf naimportuje ze souboru s příponou xmg, který byl stejným programem vyexportován. Nebo je možné vytvořit nový xmg soubor ručně uživatelem, přesně podle pravidel xml exportu tohoto programu a takový soubor importovat. Popis XML struktury je uveden v kapitole 2.6.

V každém grafu v aplikaci existují také dva speciální vrcholy „s“ a „t“. Vrchol

„s“ představuje všechny zdroje v grafu a vrchol „t“ všechny spotřebiče. Jsou to pomocné vrcholy, díky nimž algoritmus nemusí řešit tok od každého zdroje zvlášť do jednotlivých spotřebičů, ale řeší pouze tok mezi těmito dvěma body. Vrcholy „s“

a „t“ nejsou v list boxech všech dosavadních vrcholů ani sousedů vidět. Aplikace s nimi pracuje automaticky a jejich id jsou:

 s: Vrchol id = -1.

 t: Vrchol id = -2.

V aplikaci je také možné vrcholy i sousedy jednotlivých vrcholů z grafu odstraňovat. Vrcholy lze odstraňovat buď jednotlivě pomocí tlačítka „smaž“ (prvek 1.1, obrázek 8) nebo hromadně pomocí tlačítka „smaž vrcholy“ označeného číslem 1.13 na obrázku 8. Tlačítko pro mazání jednotlivých vrcholů je možné použít až po označení vrchol v seznamu existujících vrcholů. Hromadné mazání vrcholů probíhá tak, že po stisknutí tlačítka „smaž vrcholy“ se vyvolá nový formulář, ve kterém uživatel vybere jeden nebo více vrcholů, které budou z grafu odebrány a stiskne tlačítko „smaž označené“.

Sousedy jednotlivých vrcholů může uživatel také mazat či upravovat. Smazání souseda proběhne po označení vrcholu v seznamu sousedů a stisknutím tlačítka

„odeber“ (prvek 1.4, obrázek 8). Odebrání má za následek smazání hrany mezi vrcholem a sousedem, nikoliv odebrání vrcholu z grafu. Aplikace umožňuje hranu mezi vrcholy také modifikovat. Úpravou je myšleno měnit kapacitu hrany. Úpravu kapacity hrany uživatel provede kliknutím na tlačítko „uprav“ (prvek 1.5, obrázek 8). Následně se vyvolá formulář, ve kterém jsou vypsány informace o vrcholu, ze kterého hrana vychází, do kterého vrcholu směřuje a aktuální kapacita hrany. V tomto formuláři uživatel může vyplnit novou hodnotu kapacity hrany a potvrdit úpravu.

obrázek 8), ve kterém si uživatel vybere, s jakým vrcholem bude pracovat. Pod combo boxem je textové pole, kde je nutné uvést celočíselnou hodnotu (prvek 2.4, obrázek 8).

Hodnota musí být celočíselná pro splnění podmínky konečnosti použitých algoritmů.

V případě že vrchol bude označen jako zdroj, bude tato hodnota představovat jeho maximální možný tok. V případě, že vrchol bude označen jako spotřebič, bude tato hodnota vyjadřovat množství toku požadující po zdrojích. Označení vrcholu se potvrdí stisknutím tlačítka „označ jako zdroj“ (prvek 2.1, obrázek 8) nebo „označ jako spotřebič“ (prvek 2.3, obrázek 8).

Druhá varianta je označení několika vrcholů za zdroje či spotřebiče pomocí implementované funkce pro výběr náhodných vrcholů v grafu. Tato funkce umožňuje uživateli označit náhodné vrcholy jako zdroje či spotřebiče ve větším množství.

Při zvolení této varianty postupuje uživatel následovně. Použitím tlačítka 2.2 na obrázku 8 se vyvolá nový formulář „Generátor označení“ (viz. obrázek 11). V tomto formuláři je uživatel dotazován, kolik vrcholů má být vybráno jako zdroj a kolik jako spotřebič.

Počet vrcholů, které budou označeny jako zdroj uživatel uvádí do text boxu 1 na obrázku 11. Počet vrcholů, které budou označeny jako spotřebič do text boxu 4 na obrázku 11. Označování vrcholů probíhá na již vytvořeném grafu, a proto je nutné dodržet maximální přípustné množství vrcholů pro označení. Jinými slovy součet všech vrcholů a všech spotřebičů nemůže být větší než celkový počet vrcholů v grafu. Tato podmínka je ošetřena aplikací. Při zadání vyššího čísla než je přípustné pro vytvořený graf, je tato hodnota při opuštění text boxu automaticky opravena na maximální možnou hodnotu. Tato podmínka uvažuje také s množstvím zdrojů a spotřebičů, které uživatel míní vytvořit generátorem. Jinak řečeno pokud uživatel v generátoru vyplní maximální přípustné množství pro nové zdroje, nemůže již zadat množství nových spotřebičů vyšší než 0, protože veškeré neoznačené vrcholy v grafu již budou použity jako zdroje. Oba formuláře jsou vzájemně ovlivněny touto podmínkou.

Po zadání počtů vrcholů je potřeba uvést novým zdrojům hodnotu produkovaného toku a spotřebičům tok, který požadují. Množství toku, které bude uvedeno, platí pro všechny zdroje respektive spotřebiče, které se vytvoří. Například pokud uživatel zadá množství produkce 10, pak každý ze zdrojů vytvořený generátorem bude produkovat tok o hodnotě 10. Toto platí také pro spotřebiče. Tok, který budou zdroje produkovat uživatel zadává do text boxu 2 na obrázku 11. Požadavek spotřebičů

uživatel zadává do text boxu 3 na obrázku 11. Pro spuštění označování uživatel použije tlačítko 5 na obrázku 11 a aplikace provede označení vrcholů.

Dole v tomto bloku jsou dva list boxy vypisující již existující zdroje a spotřebiče. Je také možné pro nadefinování zdrojů a spotřebičů použít import a export celého grafu, kdy se v souboru s grafem nedefinují také všechny zdroje a spotřebiče.

Popis XML struktury je uveden v kapitole číslo 2.6.

Obrázek 11: Generátor zdrojů a spotřebičů

2.7.3 Spuštění analýzy a výpisy aplikace

Pokud je již nadefinován graf včetně zdrojů a spotřebičů, může uživatel spustit analýzu. Uživatel vybere zaškrtnutím check boxů požadované algoritmy:

 Ford-Fulkersonův algoritmus (viz kapitola 1.3.1).

 Dinicův algoritmus (viz kapitola 1.3.2).

 Goldbergův push relabel algoritmus (viz kapitola 1.3.3).

 Podpis algoritmu.

 Informace o začátku / ukončení analýzy.

 Celková doba běhu algoritmu v jednotkách instrukčního cyklu procesoru.

 Celková doba běhu algoritmu v milisekundách.

Pokud uživatel požaduje podrobnější výpis informací, označí před spuštěním analýzy check box „podrobný výpis“ (prvek 3.2, obrázek 8). Při této volbě bude aplikace mimo již uvedené výpisy také informovat o aktuální činnosti algoritmu.

Tyto výpisy jsou specifické pro každý algoritmus. Například v případě Dinicova algoritmu budou výpisy obsahovat momenty, kdy probíhá čištění sítě a jaké toky v ní byly použity, v případě Golbergova push-relabel algoritmu to budou informace o aktivních vrcholech a postupném protlačování přebytků toku z těchto vrcholů.

3 Praktická aplikace

Toky v sítích patří k nejčastěji aplikovaným částem teorie grafů. Pomocí toků je možné modelovat mnoho praktických situací. K popisu se využívá ohodnocený orientovaný graf, kterým lze popsat jakákoliv obecná síť. V této kapitole se popíše vybraná oblast železniční sítě v České republice orientovaným grafem a následně se vyřeší dvě úlohy týkající se analýzy toků v síti.

3.1 Vytvoření sítě

Pro řešení praktické úlohy byla vybrána železniční síť. Tato síť je grafem reprezentována následovně:

 Vrcholy jsou železniční stanice.

 Hrany mezi vrcholy reprezentují úseky železniční tratě mezi stanicemi.

 Kapacita hran odpovídá maximálnímu počtu lidí, přepravených po daném úseku tratě (po hraně).

 zdroje budou představovat libovolné železniční stanice, ve kterých budou lidé pouze nastupovat.

 spotřebiče jsou takové železniční stanice, ve kterých lidé pouze vystupují. Jinými slovy stanice, představující cílovou zastávku pro pasažéry.

Aby bylo možné správně ohodnotit graf kapacitami, je třeba uvést, že veškeré hodnoty budou znamenat počet pasažérů za jeden den. Pokud tedy například kapacita hrany v jednom směru bude mít hodnotu 200, bude to znamenat,

Liberec

Na obrázku 12 je vyobrazena část železniční sítě České republiky v oblasti mezi Libereckým a Královehradeckým krajem. Černé kružnice označují stanice a modré úseky představují trasy železnice. Každá stanice je číselně označena. Toto označení slouží pouze pro popis stanic v softwaru a ve skutečné mapě železniční sítě nevystupuje. Z důvodu, že pro řešení v aplikaci je důležitější číselné označení jednotlivých vrcholů, není většina měst v mapě označena. Stanice, u nichž je název města, se nijak neliší od ostatních vrcholů. Popisky měst slouží pouze pro geografickou orientaci v mapě. Modré číselné označení tras odpovídá skutečnému číslu traťového úseku podle podkladů českých drah. Nejedná se tedy o kapacity hran ale pouze o identifikační čísla. Seznam všech měst vzhledem k číselnému označení je v tabulce 3.

Veškeré potřebné údaje pro popis této sítě jsou uvedeny v tabulce 4.

Tabulka 3: Seznam měst

1 Černousy 21 Doksy 41 Dvůr Králové

2 Frýdlant 22 Bakov n/J 42 Smiřice

3 Jindřichovice p. Smrkem 23 Mnichovo Hradiště 43 Hradec Králové

4 Raspenava 24 Turnov 44 Rosice n/L

5 Bíly potok p. Smrkem 25 Železný Brod 45 Pardubice

6 Jablonec n/N 26 Semily 46 Přelouč

7 Josefův Důl 27 Jablonec n/J 47 Kolín

8 Smržovka 28 Mladá Boleslav 48 Velký Osek

9 Tanvald 29 Dolní Bousov 49 Poděbrady

10 Harrachov 30 Libuň 50 Nymburk

11 Liberec 31 Stará Paka 51 Veleliby

12 Hrádek n/N 32 Martinice 52 Křinec

13 Zittau 33 Kunčice n/L 53 Kopidlno

14 Varnsdorf 34 Vrchlabí 54 Jičín

15 Rybniště 35 Trutnov 55 Ostroměř

16 Jedlová 36 Svoboda n/Ú 56 Lázně Bělorad

17 Nový Bor 37 Královec 57 Hněvčeves

18 Česká Lípa 38 Č. Kostelec 58 Chlumec n/Cidl.

19 Mimoň 39 Starkoč 59 Hostinné

20 Jablonné v. Podj. 40 Jaroměř 60 Rokytnice n/J

Tabulka 4: Seznam železničních tras

Trasa č. Trasa mezi městy Vrcholy jízd/d Kapacita c

010 Kolín, Přelouč, Pardubice 47, 46, 45 54 44280

020 Hradec Králové, Chlumec n/C, Velký Osek 43, 58, 48 6 1980

030 Liberec, Turnov, Železný Brod, Semily, Stará Paka 11, 24, 25, 26, 31 19 4750

030 Stará Paka, Dvůr Králové n/L, Jaroměř 31, 41, 40 16 2400

031 Jaroměř, Smiřice, Hradec Králové, Rosice, Pardubice 40, 42, 43, 44, 45 34 8160 032 Jaroměř, Starkoč, Červený Kostelec, Trutnov 40, 39, 38, 35 14 5040

034 Smržovka, Josefův Důl 8, 7 10 800

035 Železný Brod, Tanvald 25, 9 14 1960

036 Liberec, Jablonec n/N, Smržovka, Tanvald 11, 6, 8, 9 22 2640

036 Tanvald, Harrachov 9, 10 13 1300

037 Liberec, Raspenava, Frýdlant 11, 4, 2 8 1280

037 Frýdlant, Černousy 2, 1 5 800

038 Raspenava, Bílý Potok 4, 5 8 720

039 Frýdlant, Jinřichovice p. Smrkem 2, 3 6 510

040 Stará Paka, Martinice, Kunčice, Hostinné, Trutnov 31, 32, 33, 59, 35 8 2160 040 Stará Paka, Lázně Bělohrad, Ostroměř, Chlumec n/C 31, 56, 55, 58 13 3510

041 Turnov, Libuň, Jičín 24, 30, 54 10 2000

041 Jičín, Ostroměř, Hněvčeves, Hradec Králové 54, 55, 57, 43 11 2200

042 Martinice, Jablonec n/J 32, 27 9 720

042 Jablonec n/J, Rokytnice 27, 60 1 80

043 Trutnov, Královec 35, 37 3 255

044 Kunčice, Vrchlabí 33, 34 17 1530

045 Trutnov, Svoboda n/Ú 35, 36 12 1080

061 Veleliby, Křinec, Kopidlno, Jičín 51, 52, 53, 54 11 1650

062 Chlumec n/C, Křinec 58, 52 6 480

064 Stará Paka, Libuň, Dolní Bousov, Mladá Boleslav 31, 30, 29, 28 6 720 820

Hodnoty v tabulce 4 plně definují celou uvedenou železniční síť. Na obrázku 12 lze vyhledat libovolnou trasu a pomocí tabulky 4 zjistit o který úsek se jedná a jaká je maximální kapacita tohoto úseku (této hrany). Pokud například zjišťujeme kapacitu hrany mezi vrcholy 11 a 6 a postupujeme následovně:

1. Na obrázku 12 zjistíme číslo trasy mezi vrcholy 11 a 6. V tomto případě je to číslo trasy 036.

2. V tabulce 4 vyhledáme řádek popř. řádky s číslem trasy 036.

3. V případě, že řádků je více je nutné vybrat ten řádek, ve kterém se jedná o trasu mezi vrcholy 11 a 6.

4. Z hodnot v tabulce lze nyní vyčíst, že se jedná o trasu mezi městy:

Liberec, Jablonec n/N, Smržovka, Tanvald. Dalším údajem je, že na této trase se pohybuje během dne několik typů vlakových souprav, jejichž průměrný maximální počet pasažérů je 120. Vlaky projedou na trase 22 krát denně, a proto je výsledná kapacita hrany mezi těmito vrcholy rovna číslu 2640.

Informace v tabulce jsou podloženy skutečnými daty uváděnými Českými drahami. Pro zjištění hodnot uvedených v tabulce 4 byl zvolen konkrétní den v roce a to svátek z důvodu zpřehlednění informací. Zdrojem byl internetový server

„http://www.zelpage.cz/razeni“. Přičemž maximální kapacita soupravy je počet míst pro pasažéry udávaný výrobcem vagonů. Podle pravidel Českých drah se na konkrétních trasách železnice pohybují přesně dané vlakové soupravy. Z toho vyplývá, že při zanedbání dnů s rozdílným denním provozem, získáváme přesný popis železniční sítě. Jinými slovy na trase č. 036 z Tanvaldu do Harrachova jezdí soupravy, jejichž průměrná maximální kapacita je 100 pasažérů, 13 krát denně, a proto je kapacita této hrany vždy 1300. Soupravy jezdí po trasách vždy ve stejném počtu v obou směrech, a proto je kapacita hran v obou směrech stejná.

S takto definovaným grafem je možné řešit pomocí vytvořené aplikace různé úlohy o propustnosti. Oblast železniční sítě na obrázku 12 je součástí elektronické přílohy v adresáři „\priklady XMG\zeleznicni_trat.xmg“.

3.2 Řešení úloh

První úloha s tímto grafem bude zjišťovat propustnost po železniční síti mezi Libercem a Hradcem Králové (nebude uvažována časová dostupnost nalezené cesty).

Do již nadefinovaného grafu v programu přibude nový zdroj a spotřebič. Jako zdroj bude zvolen vrchol 11 (Liberec). Město Liberec má zhruba sto tisíc obyvatel, a proto hodnota produkce tohoto zdroje bude 100 000. Pro zjištění maximální propustnosti mezi těmito vrcholy bude označen vrchol 43 (Hradec Králové) jako spotřebič a jeho požadavek bude také hodnota 100 000. Po spuštění analýzy končí všechny tři algoritmy se stejným výsledkem. Výstup aplikace pro Ford-Fulkersonův algoritmus bez použití podrobného výpisu je následující:

>>FORD-FULKERSON | Začínám analyzovat|

>>FORD-FULKERSON | Dokončeno | Nelze zásobovat spotřebiče, zbývá: 91370

>>FORD-FULKERSON | čas: | 3031 (tiks)

>>FORD-FULKERSON | čas: | 1 (ms)

Z výpisu lze vyčíst, že spotřebiče nelze zásobovat a z celkového požadavku 100 000 stále chybí 91 370. Propustnost železniční sítě mezi Libercem a Hradcem Králové je tedy 8630 pasažérů za jeden den. Další informace z výsledného výpisu oznamují, že software pomocí Ford-Fulkersonova algoritmu, vyřešil tuto úlohu za 1 milisekundu a pro dokončení analýzy procesor vykonal 3031 instrukčních cyklů.

Ve druhé úloze bude probíhat analýza s jedním zdrojem a třemi spotřebiči.

V tomto případě bude potřeba zjistit maximální propustnost z jednoho města do tří odlišných. Řekněme, že z určitého důvodu bude třeba všechny občany jednoho města transportovat do konkrétních tří měst, například kvůli přítomnosti kvalitní nemocnice.

Aby řešení nebylo na první pohled jednoznačné, všechna čtyři města byla zvolena tak, aby se v nich křížilo více tras s většími kapacitami.

kapacitu v obou směrech. Zdroje tak budou vrcholy 28 (Mladá Boleslav), 43 (Hradec Králové), 11 (Liberec). Produkce všech zdrojů bude počet obyvatel města Turnov tedy 14 400. Spotřebič bude vrchol 24 (Turnov) s požadavkem také 14 400.

Výstup po analýze pomocí Dinicova algoritmu je následující:

>>DINIC | Začínám analyzovat | Graf - počet vrcholů: 62 počet hran: 147

>>DINIC | Dokončeno | Nelze zásobovat spotřebiče, zbývá: 180

>>DINIC | čas: | 10374 (tiks)

>>DINIC | čas: | 5 (ms)

Výpis oznamuje, že maximální tok mezi zdroji a spotřebičem je o hodnotu 180 menší než požadovaný. Z tohoto vyplývá, že pomocí nadefinované železniční sítě je možné během jednoho dne dopravit až na posledních 180 lidí všechny obyvatele města Turnov do měst Liberec, Hradec Králové a Mladá Boleslav.

Závěr

V rámci bakalářské práce byla úspěšně vytvořena aplikace pro analýzu toků v síti. Program byl vytvořen pomocí vývojového prostředí Microsoft Visual Studio v programovacím jazyce C#. Aplikace umožňuje definovat libovolný orientovaný graf a v tomto grafu definovat vybrané vrcholy jako zdroje či spotřebiče. Program korektně analyzuje toky v sítích pomocí Ford-Fulkersonova, Dinicova a Golbergova push-relabel algoritmu. Analýzu je možné spustit s volbou podrobného výpisu, kdy aplikace vypisuje důležité kroky algoritmu a umožňuje tak pochopit chování algoritmů v praxi.

V programu je dále implementována možnost ukládání a načítaní veškerých vstupů z a do speciálního XMG souboru. Součástí aplikace je generátor náhodných grafů a generátor označení náhodných vrcholů za zdroje a spotřebiče. Součástí bakalářské práce je popis práce s vytvořenou aplikací.

V rámci bakalářské práce byly jednotlivé implementované algoritmy porovnány z hlediska rychlosti výpočtu.

Pomocí vytvořené aplikace byly vyřešeny úlohy o propustnosti v síti, tvořené skutečnou oblastí železniční sítě v České republice.

Použitá literatura

[1] ČERNÝ, Jakub. Obsah. Základní grafové algoritmy [online]. MFF UK,

Praha, 2010 [cit. 2013-05-15]. Dostupné z:

http://kam.mff.cuni.cz/~kuba/ka/

[2] DEMEL, Jiří. Grafy a jejich aplikace. Vyd. 1. Praha: Academia, 2002, 257 s. ISBN 80-200-0990-6.

[3] DVOŘÁK, Tomáš. Toky v sítích. 2009, 22 s. Dostupné z:

http://ksvi.mff.cuni.cz/~dvorak/vyuka/UIN009/Toky.pdf

[4] JIROVSKÝ, Lukáš. Toky v sítích. Teorie grafů [online]. 2010 [cit. 2013-05-15]. Dostupné z: http://teorie-grafu.cz/vybrane-problemy/toky-v-sitich.php

[5] DRAYTON, Peter, Ben ALBAHARI a Ted NEWARD. C# v kostce:

pohotová referenční příručka. 1. vyd. Překlad Karel Voráček. Praha:

Grada, 2003, 764 s. ISBN 80-247-0443-9.

[6] MAREŠ, Martin. Krajinou grafových algoritmů: průvodce pro středně pokročilé. Vyd. 1. Praha: ITI, 2007, 71 s. ISBN 978-80-239-9049-2.

[7] Tok v síti. In: Wikipedia: the free encyclopedia [online]. San Francisco (CA): Wikimedia Foundation, 2001 [cit. 2013-05-15]. Dostupné z:

http://cs.wikipedia.org/wiki/Tok_v_s%C3%ADti

[8] CORMEN, Thomas H. Introduction to algorithms. 3rd ed. Cambridge:

MIT Press, 2009, 1292 s. ISBN 978-0-262-03384-8.

Elektronická příloha

 Soubor BakalarskaPrace.pdf s textem bakalářské práce ve formátu pdf.

 Složka s aplikací.

 Složka s vytvořenými grafy v souborech XMG.

 Složka se zdrojovými kódy aplikace.

Related documents