Tre cannibali e tre missionari devono attraversare un fiume. La loro barca può contenere solo due persone. Se i cannibali sono più numerosi dei missionari, ai lati del fiume, i missionari sono nei guai (non descriverò i risultati). Ogni missionario e ogni cannibale possono remare sulla barca. Come possono attraversare il fiume tutti e sei?Cannibali e missionari che usano IDDFS e GreedyBFS
Non riesco a trovare un algoritmo per risolvere questo problema utilizzando IDDFS (Iterative deepening depth-first search) e GreedyBFS (greedy best-first search). Un'idea su come risolvere questo mi renderebbe felice.
Modificato:
ho trovato un algoritmo per IDDFS sul wiki:
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
}
Ma io non riesco a capire cosa espandere (nodo) nel DLS() dovrebbe realizzare nel mio problema. Questa è la mia classe 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;
}
}
Gradirei qualsiasi aiuto.
Sei stanco di vedere come lo spazio degli stati può essere esplorato con una ricerca, o con quale dovrebbe essere il criterio per il percorso migliore? –
* "Come possono tutti e sei attraversare il fiume?" * Bene, se intendi "vivo o semi-digerito", il problema è facile! ;) –
Di solito non è il metodo di ricerca ma la rappresentazione del problema. Quali sono tutte le possibili azioni e stati in questo problema? Si noti inoltre che le persone possono salire a bordo di entrambi i lati del fiume, non solo il lato in cui hanno iniziato. –