IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 2 - Generování náhodného bludiště

V minulé lekci, Šíření do šířky (Vlna), jsme si popsali algoritmus šíření do šířky (Vlna) k hledání cesty v bludišti mezi překážkami.

Bludiště může být definováno např. jako 2D pole hodnot typu byte (nebo něco podobně praktického), kde každý prvek tohoto pole představuje jedno políčko. Hodnoty políček budeme potřebovat celkem tři:

  • Nic (volně průchodné políčko)
  • Zeď (neprůchodné políčko)
  • Základ (imaginární, využije se jen při generování bludiště)

Připravíme si základ bludiště:

Algoritmy pro bludiště

Kolem dokola je zeď, políčka s křížkem znamenají hodnotu "základ". Budeme potřebovat nějakou funkci, která nám spočítá, kolik základů ještě v bludišti zbývá (procházíme pole políčko po políčku a počítáme hodnoty Základ - nic těžkého).

Tvorba bludiště probíhá takto. Nejdřív náhodně vybereme jedno základové políčko: spočítáme základy, na výsledek použijeme funkci Random, vyjde číslo dejme tomu n. Potom procházíme bludiště po řádcích tak dlouho, až narazíme na n-té základové políčko:

Náhodně vybrané základové políčko - Algoritmy pro bludiště

Šipky znázorňují čtyři možné směry, kterými můžeme vést z políčka zeď.

Nyní jeden z těch směrů náhodně zvolíme a začneme budovat zeď. Všechna volná a základová políčka, na která narazíme, se mění na zdi. Skončíme, když narazíme na jinou zeď (proto musí být bludiště na počátku ohraničené, aby nám zdi neutekly okolo):

Zedničina - Algoritmy pro bludiště

Odtud se vrátíme k náhodnému výběru základu a postavíme další zeď a tak pořád dokola, dokud všechna základová políčka v bludišti nejsou zazděná:

Nové políčko - Algoritmy pro bludiště
Nová zeď - Algoritmy pro bludiště
Hotové bludiště - Algoritmy pro bludiště

A to je celé. Výsledné bludiště má několik příjemných vlastností:

  • Mezi libovolnými dvěma volnými políčky existuje vždy právě jedna možná cesta, ani víc, ani míň. To vyplývá z toho, že v bludišti nemohou být žádné izolované "ostrovy" zdí, které by nebyly napojeny na okraj.
  • Všechna políčka označená zde na obrázku tečkou budou zaručeně vždy volná, můžeme na ně tedy dle libosti umístit start, cíl a další věci:
Volná políčka - Algoritmy pro bludiště

Pokud nám připadá bludiště příliš obtížné na projití, stačí na začátku několik náhodně vybraných základových políček změnit na zeď - čím víc, tím jednodušší pak bludiště bude, protože tím umožníme vznik izolovaných úseků zdí, které se nedotýkají okraje a jdou tedy obejít více způsoby.

Jestli máte radši takové bludiště, kde zdi představují tenké čáry na rozhraní mezi políčky, nevadí. V paměti počítače necháme bludiště uložené ve výše uvedeném formátu a modifikujeme jenom proceduru, která ho zobrazuje - liché řádky a sloupce se vykreslí jako čáry s nulovou šířkou, sudé normálně jako čtverečky.

V další lekci, Jak najít nejkratší cestu z bodu A do bodu B?, si popíšeme algoritmus pro hledání nejkratší cesty z bodu A do bodu B se zdrojovými kódy.


 

Předchozí článek
Šíření do šířky (Vlna)
Všechny články v sekci
Algoritmy pro bludiště
Přeskočit článek
(nedoporučujeme)
Jak najít nejkratší cestu z bodu A do bodu B?
Článek pro vás napsal Mircosoft
Avatar
Uživatelské hodnocení:
39 hlasů
Autor je amatérský pascalista, assemblerista a bastlíř. Profesionálně psal nebo píše v HLASM, Rexxu, Cobolu, ST, LAD, FBD, PHP, SQL, JS, Basicu a pár dalších jazycích, které kupodivu stále existují a používají se :-).
Aktivity