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

Počítačová reprezentace grafů

Úkolem bude rozšířit a upravit třídy sloužící k počítačové reprezentaci grafů, tj. abstraktních matematických struktur.

(Definice grafu viz přednáška 29. 10. 2002 nebo příslušné matematické předměty.)

Tentokrát již ponecháte originální třídy v balících, kde jsou a budete je rozšiřovat podtřídami umístěnými do vašich balíků.

Zdrojové texty toho, co potřebujete, naleznete v adresáři
Grafy

pozn: Demonstrační program načítá a ukládá do datových souborů (.grf) uložených v adresáři
Adresář obsahující vzorové datové soubory

Prvním podúkolem bude vytvořit podtřídu od třídy GraphReader, tuto podtřídu umístit do vlastního balíku cz.muni.fi.{vas_login}.graphs. Podtřídu nazvěte WeightedGraphReader - bude umět načítání hranově ohodnoceného grafu ze souboru metodou public WeightedMatrixGraph readWeightedMatrixGraph(File f). Inspirujte se třídou GraphReader.

Obdobně rozšiřte i třídu GraphWriter -> do třídy WeightedGraphWriter s metodou pro ukládání ohodnocených grafů.

Dalším úkolem bude implementovat rozhraní tomp.graphs.traversal.NodeHandler nějakou vaší třídou, např. MyHandler. Toto rozhraní má jedinou metodu a dovoluje psát univerzálně použitelné algoritmy na procházení grafů - do hloubky, do šířky nebo jinak... Jednou napíšeme metodu na procházení (traversal) - viz např. tomp.graphs.traversal.Traversal (metoda depthFirst a používáme ji tak, že jí pokaždé zadáme jiný posluchač na událost "navštívení uzlu". Pak můžeme akci při navštívení uzlu zcela libovolně implementovat.

Vašim úkolem bude napsat posluchač (handler) MyHandler tak, aby při návštěvě uzlu vypsal na obrazovku vhodnou hlášku, která sdělí, ve kterém grafu a kterém uzlu právě jsme, a vrátil "true", aby se mohlo pokračovat dále.

Dalším úkolem navazujícím na předchozí bude rozšíření MyHandleru tak, aby se při konstrukci handleru (v konstruktoru) dalo specifikovat, který uzel je cílový. Až se při prohledávání narazí na cílový uzel, vypíše handler hlášku ve smyslu "byl nalezen cílový uzel" a vrátí "false", aby se už zbytečně nepokračovalo dále.

Posledním úkolem bude rozšířit třídu Traversal (do třídy MyTraversal uložené ve vlastním balíku cz.muni.fi.{vas_login}.graphs.traversal, viz výše) tak, aby uměla i procházení do šířky metodou breadthFirst. Metoda by měla mít stejnou signaturu (hlavičku) jako depthFirst. Navrhněte dvě třídy - varianty procházení s handlerem i bez něj.

Na demonstraci výše vytvořených tříd si podle svých potřeb přepište třídu tomp.graphs.Demo a uložte si ji do svého balíku pro grafy. Upravte zejména deklaraci package a deklarace import, případně i názvy tříd.

Obecné informace

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

za tyto úlohy dohromady získáte max. 4 body.

pozn. k procházení do hloubky/šířky: Procházením do hloubky/šířky se pro účely těchto úloh rozumí postup, kdy jsou v přesně definovaném pořadí právě jednou navštíveny všechny uzly daného orientovaného grafu, dosažitelné ze zadaného výchozího uzlu. Např. v souvislém grafu jsou tedy navštíveny všechny uzly.


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