Drei Kannibalen und drei Missionare müssen einen Fluss überqueren. Ihr Boot kann nur zwei Personen halten. Wenn die Kannibalen den Missionaren auf beiden Seiten des Flusses zahlenmäßig überlegen sind, sind die Missionare in Schwierigkeiten (ich werde die Ergebnisse nicht beschreiben). Jeder Missionar und jeder Kannibale kann das Boot rudern. Wie können alle sechs über den Fluss kommen?Kannibalen und Missionare mit IDDFS und GreedyBFS
Ich kann keinen Algorithmus finden, um dieses Problem mit IDDFS (Iterative Vertiefung Tiefensuche zuerst) und GreedyBFS (gierige Best-First-Suche) zu lösen. Eine Idee, wie ich das lösen könnte, würde mich auch glücklich machen.
Edited:
ich einen Algorithmus für IDDFS auf dem Wiki gefunden:
IDDFS(root, goal)
{
depth = 0
repeat
{
result = DLS(root, goal, depth)
if (result is a solution)
return result
depth = depth + 1
}
}
DLS(node, goal, depth)
{
if (depth == 0 and node == goal)
return node
else if (depth > 0)
for each child in expand(node)
DLS(child, goal, depth-1)
else
return no-solution
}
Aber ich kann nicht herausfinden, was soll in DLS (Knoten) expand() zu erreichen, meine Problem. Das ist meine Klasse Node:
public class Node{
//x-no of missionaries
//y-no of cannibals
//z-position of boat
int x,y;
boolean z;
Node(int x,int y,boolean z){
this.x=x;
this.y=y;
this.z=z;
}
public int getM(){
return this.x;
}
public int getC(){
return this.y;
}
public boolean getB(){
return this.z;
}
public void setM(int x){
this.x=x;
}
public void setC(int y){
this.y=y;
}
public void setB(boolean z){
this.z=z;
}
}
ich Hilfe schätzen würde.
Haben Sie Probleme damit, zu sehen, wie der Zustandsraum mit einer Suche erkundet werden kann oder mit welchem Kriterium der beste Pfad sein sollte? –
* "Wie können alle sechs über den Fluss kommen?" * Nun, wenn du 'lebend oder halbverdaut' meinst, ist das Problem einfach! ;) –
Es ist normalerweise nicht die Suchmethode, sondern die Darstellung des Problems. Was sind all die möglichen Aktionen und Zustände in diesem Problem? Beachten Sie auch, dass Menschen auf beiden Seiten des Flusses an Bord gehen können, nicht nur auf der Seite, auf der sie begonnen haben. –