Cvičenie 1

Riešenie tejto úlohy odvzajte v moodli do 9.10.2014 13:09:59.

Naprogramujte riešenie úlohy o gazdovi, koze, kapuste a vlku (ktorú máte spísať v DU1).

Niekoľko poznámok, ktoré by mohli pomôct:

Najjednoduchšie riešenie je buď jednoduchý backtrack (napríklad s obmedzenou hĺbkou) alebo trošku "korektnejšie" prehľadávanie do šírky. Oboje sa dá naprogramovať vcelku ľahko, pokiaľ si dobre zvolíme reprezentáciu stavov a akcií.

Pri prehľadávaní do šírky môže, ale aj nemusí, mať zmysel pamätať si stavy, kde ste boli.

Každý stav vieme jednoducho reprezentovať štyrmi premennými s hodnotami true/false (v plánovaní sa im zvykne hovorit fluenty): gazda_vlavo, koza_vlavo, kapusta_vlavo, vlk_vlavo. Máme tiež štyri možné akcie: prevez_gazdu, prevez_kozu, prevez_kapustu, prevez_vlka; pri prvej akcii sa prevezie len gazda, pri ostatných sa vždy prevezie gazda a dotyčný objekt.

Na reprezentáciu stavu je najjednoduchšie použiť triedu/struct obsahujúci tie potrebené štyri premenné, ale ak sú všetky binárne (boolovské) a nie je ich príliš veľa (napríklad menej ako 32 či 64), tak sa takáto množina veľmi ľahko reprezentuje ako jedno číslo potrebnej veľkosti, kde každý bit bit zodpovedá jednému fluentu... (aj keď napríklad slušný kompilátor c/c++ to vie spraviť aj sám, ak má class/struct obsahujúci iba bool premenné).

Jedna z možných kostier riešenia:

Vim logo FireFox logo CSS XHTML
Jozef Siska @ KAI FMFI UK YoYo @ KSP KAI (DAI) KSP