← zpět

Datové struktury, BFS a DFS

Lekce 08

Úlohy

Úloh je hodně. Na odevzdání máte 3 týdny, tedy do 13. listopadu.

Grafová třída (1 bod)

Napište si třídu, která bude uchovávat graf jako seznam sousedů. Na instanci třídy chceme mít tři metody:

Nejkratší cesta v neohodnoceném grafu (3 body)

Na vstupu očekávejte graf zadaný v tomto formátu:

1 4 8 29 4 75 10
1 8
4 29
10 1
29 75
75 10
-
4 75

První řádek určuje počet a "názvy" vrcholů. Další řádky určují hrany mezi definovanými vrcholy. Můžete vždy očekávat korektní vstup. Po definovaných hranách následuje znak spojovníku (-) a poté dva vrcholy. Vstup končí, pokud narazíte na prázdný řádek.

Najděte nejkratší cestu mezi těmito vrcholy a vypište, jak bychom se z počátečního vrcholu dostali do koncového.

Bludiště (5 bodů)

Na vstupu dostanete bludiště 5 na 5:

S0010
11010
00000
01100
0001E

S označuje začátek, E konec, 1 reprezentuje stěnu, 0 volné pole na které můžeme vstoupit. Pokud existuje cesta, vypište cestu danou posloupností souřadnic ve formátu (x, y), kde x a y jsou čísla od 0 do 4. Pokud cesta neexistuje, program nevypíše nic.

Cykly (4 body)

Na vstupu očekávejte graf zadaný v tomto formátu:

1 4 8 29 4 75 10
1 8
4 29
10 1
29 75
75 10

První řádek určuje počet a "názvy" vrcholů. Další řádky určují hrany mezi definovanými vrcholy. Můžete vždy očekávat korektní vstup. Výčet hran končí, pokud narazíte na prázdný řádek.

Napište program, který zjistí, zdali je v grafu cyklus.

Komponenty souvislosti (4 body)

Na vstupu očekávejte graf zadaný v tomto formátu:

1 4 8 29 4 75 10
1 8
4 29
10 1
29 75
75 10

První řádek určuje počet a "názvy" vrcholů. Další řádky určují hrany mezi definovanými vrcholy. Můžete vždy očekávat korektní vstup. Výčet hran končí, pokud narazíte na prázdný řádek.

Napište program, který zjistí, kolik má graf komponent souvislosti.

Cesta králem (6 bodů)

Napište program, který najde nejkratší cestu králem na šachovnici 8x8. Na šachovnici jsou ale některá políčka, na které nelze vstoupit.

Výstup je buď prázdný (pokud neexistuje cesta) nebo posloupnost souřadnic políček, která král musí projít. Posloupnost vždy začíná počátečním a končí cílovým políčkem. Pokud existuje více nejkratších cest, vypište jen jednu z nich.

Vstup programu vypadá následovně:

Příklad vstupu:

1
2 1
1 1
3 3

Příklad výstupu:

1 1
2 2
3 3

Co jsme dnes probrali

Zásobník (datová struktura!!!) a fronta

Jaké mají operace na zásobníku a ve frontě časovou složitost?

Doplňující pojmy (z předchozí lekce)

Z jednoho do druhého vrcholu můžeme dojít několika způsoby. Pokud vybereme jakoukoli posloupnost hran, říkáme této posloupnosti sled. Pokud se ve sledu neopakují hrany, této posloupnosti říkáme tah. Pokud se vrcholy neopakují, řekneme, že jde o cestu.

To, že lze z každého vrcholu dojít do každého jiného po cestě neznamená, že spolu vrcholy sousedí.

Slovo cesta je v teorii grafů dvojznačné. Jednak nám může říkat po jaké trase se vydat, abychom došli z jednoho vrcholu do druhého. Tato trasa nám ale také tvoří samostatný graf. Tento graf je jistě podgrafem grafu původního.

Reprezentace grafu

Prohledávání do šířky

Prohledávání do hloubky

Poznámky na konec