\documentclass{bschlangaul-aufgabe} \begin{document} \bAufgabenMetadaten{ Titel = {Aufgabe 5}, Thematik = {Drei Missionare und drei Kannibalen}, Referenz = 66115-2013-F.T2-A5, RelativerPfad = Examen/66115/2013/03/Thema-2/Aufgabe-5.tex, ZitatSchluessel = examen:66115:2013:03, BearbeitungsStand = OCR, Korrektheit = unbekannt, Ueberprueft = {unbekannt}, Stichwoerter = {Graphen, Breitensuche}, EinzelpruefungsNr = 66115, Jahr = 2013, Monat = 03, ThemaNr = 2, AufgabeNr = 5, } Drei Missionare und drei Kannibalen befinden sich am Ufer eines Flusses und möchten diesen überqueren. Dazu steht ihnen ein Boot zur Verfügung, das ein oder zwei Personen befördern kann. Verbleiben an einem Ufer mehr Kannibalen als Missionare, so werden die Missionare verspeist. Die Frage besteht nun darin, wie alle Personen unversehrt auf die andere Seite des Flusses gelangen. \index{Graphen} \footcite{examen:66115:2013:03} Im Anfangszustand befinden sich alle Personen und das Boot auf einer Seite des Flusses. Nehmen Sie an, es sei die linke Seite des Flusses. Im Zielzustand befinden sich alle Personen und das Boot auf der anderen Seite des Flusses. Jeden Zustand kann man durch folgendes Fünftupel beschreiben: Missionareyngs X Kannibalen;;„xs X Missionareyeens X Kannibalenyechıs X Boolposition Dabei werden die Elemente für Missionare und Kannibalen durch natürliche Zahlen und die Bootsposition durch einen der Strings „links“ oder „rechts“ modelliert. Der Anfangszustand wäre somit also (3, 3, 0, 0, » links") und der Zielzustand (0, 0, 3, 3, „rechts‘“). Schreiben Sie Algorithmen zur Lösung dieses Suchproblems und retten Sie die Missionare! Es ist empfehlenswert (aber nicht zwingend), hierzu eine funktionale Programmiersprache zu verwenden. Gehen Sie im Einzelnen vor, wie folgt: \begin{enumerate} \item Schreiben Sie eine Funktion, die alle möglichen Überfahrten von links nach rechts oder umgekehrt modelliert, d. h. die zu einem gegebenen Zustand die Liste der möglichen Folgezustände im Sinne der o. g. Regeln berechnet. Gehen Sie dazu von allen möglichen Überfahrten aus und überprüfen Sie für jede konkrete Überfahrt mittels einer geeigneter Funktion, ob diese zu einem zulässigen Zustand führt. Zustände, die die Missionare nicht überleben, gelten im Sinne des Rettungsvorhabens ebenfalls als nicht zulässig. Nicht zulässige Zustände werden nicht in die Liste der möglichen Folgezustände eingefügt. \item Geben Sie eine Funktion an, die feststellt, ob ein Zyklus vorliegt, d. h. ob ein Zustand in einer Liste bereits besuchter Zustände schon enthalten ist. \item Verwenden Sie Ihre Ergebnisse aus a.) und b.), um eine Funktion anzugeben, die dieses Suchproblem mittels Breitensuche löst. (Sie können die Funktionen aus a.) und b.) hier auch dann verwenden, wenn Sie diese Teilaufgaben nicht vollständig gelöst haben.) Die Funktion erhält als Eingabe einen Start- und einen Zielzustand und liefert als Ergebnis die erste gefundene Liste von Zuständen, die das Problem löst. \index{Breitensuche} \end{enumerate} \end{document}