Consciente del problema de los misioneros bárbaros que cruzan el río en Java

//CrossRiverQuestion.java

¿Importar? Java .util .ArrayList;

¿Importar? Lista de utilidades de Java;

¿Público? ¿clase? CrossRiver¿Pregunta? {

¿Público? ¿Electricidad estática? ¿Vacío? principal(Cadena[]?args)? {

¿Pregunta sobre CrossRiver? q? =?¿Nuevo? CrossRiverQuestion(5,?4);

q .solve question();

}

¿Privado? int? Peonía;

¿Privado? int? Salvaje;

¿Privado? lista<Node>? ¿Lista de resultados? =?¿Nuevo? ArrayList & ltNode & gt();

¿Público? lista<Node>? resolverPregunta()? {

¿Nodo? ¿norte? =?¿Nuevo? Nodo(peoNum, naturaleza num, 0, 0, new?ArrayList<inteteger>(),0,0);

¿Booleano? dfsResultado? =?DFS(n);

if(dfsResult)? {

resultList.add(0, n);

¿para (nodo? ¿nodo?:? lista de resultados)? {

System.out.println("Misionero de la orilla izquierda:"+node.getLeftPeo()+"Salvaje de la orilla izquierda:?"+node.getLeftSavage()+"?Misionero de la orilla derecha:?"+ node .getRightPeo()+"Salvaje en la orilla derecha:"+node.getRightSavage()+"Predicador en el barco:"+node.getOnBoatPeoNum()+"Salvaje en el barco:"+node .

}

¿Volver? Lista de resultados;

}

¿Regresión? null

}

¿Público? CrossRiverQuestion(int?Peony?int?savageNum)? {

super();

¿Esta? =?Peonía;

¿Qué es esto? =?Bárbaro;

}

¿Privado? ¿Booleano? dfs(nodo?n)? {

si(n.hasVisited())? ¿devolver? Falso;

n . agregar suma de comprobación();

if(n . getleftpeo()== 0 & ampn.getLeftSavage()==0)? ¿devolver? verdadero;

if(n . getleftpeo()& lt; 0 | | n . getrightpeo()& lt; 0 | | n . getleftsavage()& lt; 0 | | n . getrightsavage()& lt;0)?{

¿Volver? Falso;

}

if(n . getleftpeo()<getleftsavage()&n.getleftpeo()>0)?return? Falso;

if(n.getrightpeo()<getrightsavage()&n.getrightpeo()>0)?¿regresar? Falso;

if(n . get curr _ STATE()= = n . getstateboatleft

())? {

¿Nodo? n1? =?¿Nuevo? Nodo(n.getLeftPeo()-1, n.getLeftSavage()-1, n.getRightPeo()+1, n.getStateBoatRight(), n.getNodesCheckSum(), 1); dfs(n1))? {

resultList.add(0, n 1);

¿Regresión? Verdadero;

}

¿Nodo? n4? =?¿Nuevo? Nodo(n.getLeftPeo()-2, n.getLeftSavage(), n.getRightPeo()+2, n.getRightSavage(), n.getStateBoatRight(), n.getNodesCheckSum(), 2, 0);

si(dfs(n4))? {

resultList.add(0, n4);

¿Regresión? Verdadero;

}

¿Nodo? n5? =?¿Nuevo? Nodo(n.getLeftPeo(), n.getLeftSavage()-2, n.getRightPeo(), n.getRightSavage()+2, n.getStateBoatRight(), n.getNodesCheckSum(), 0, 2);

if(dfs(n5)){

resultList.add(0, n5);

¿Regresión? ¿Real;

}

}?

¿Y si? {

¿Nodo? n6? =?¿Nuevo? Nodo(n.getLeftPeo(), n.getLeftSavage()+1, n.getRightPeo(), n.getRightSavage()-1, n.getStateBoatLeft(), n.getNodesCheckSum(), 0, 1); >

si(dfs(n6))? {

resultList.add(0, n6);

¿Regresión? Verdadero;

}

¿Nodo? n7? =?¿Nuevo? Nodo(n.getLeftPeo()+1, n.getLeftSavage(), n.getRightPeo()-1, n.getRightSavage(), n.getStateBoatLeft(), n.getNodesCheckSum(), 1, 0);

si(dfs(n7))? {

resultList.add(0, n7);

¿Regresión? Verdadero;

}

¿Nodo? n1? =?¿Nuevo? Nodo(n.getLeftPeo()+1, n.getLeftSavage()+1, n.getRightPeo()-1, n.getRightSavage()-1, n.getStateBoatLeft(), n.getNodesCheckSum(), 1); /p>

if(dfs(n1))? {

resultList.add(0, n 1);

¿Regresión? Verdadero;

}

¿Nodo? n4? =?¿Nuevo? Nodo(n.getLeftPeo()+2, n.getLeftSavage(), n.getRightPeo()-2, n.getRightSavage(), n.getStateBoatLeft(), n.getNodesCheckSum(), 2, 0);

si(dfs(n4))? {

resultList.add(0, n4);

¿Regresión? Verdadero;

}

¿Nodo?

n5? =?¿Nuevo? Nodo(n.getLeftPeo(), n.getLeftSavage()+2, n.getRightPeo(), n.getRightSavage()-2, n.getStateBoatLeft(), n.getNodesCheckSum(), 0, 2);

if(dfs(n5)){

resultList.add(0, n5);

¿Regresión? Real;

}

}

¿Devolución? Falso;

}

¿Público? lista<Node>? getResultList()? {

¿Volver? Lista de resultados;

}

}Node.java

¿Importar? Java .util .ArrayList;

¿Importar? Lista de utilidades de Java;

¿Público? ¿clase? ¿nodo? {

¿Privado? lista<inteteger>? nodosCheckSum? =?¿Nuevo? ArrayList<Integer>();

¿Privado? int? leftPeo

¿Privado? int? rightPeo

¿Privado? int? leftSavage

¿Privado? int? rightSavage

¿Privado? int? ¿CURR_ESTADO? =?0;

¿Privado? int? onBoatPeoNum? =?0;

¿Privado? int? onBoatSavageNum? =?0;

¿Privado? finales? int? ¿Estado_barco_izquierda? =?0;

¿Privado? finales? int? ¿Derecho_del_buque? =?1;

¿Público? Nodo(int? leftPeo? int? left Savage,? int? rightPeo? int? right Savage? int? status,? list? checksum list? int? onBoatPeoNum,? int? onBoatSavageNum)? {

Esto.

¿CURR_ESTADO? =?Estado;

Esto. leftPeo? =?leftPeo

¿Esto. =?leftSavage

Esto, ¿verdad? =?rightPeo

¿Verdaderamente salvaje? =?rightSavage

this.nodesCheckSum.addAll(lista de suma de verificación);

this.onBoatPeoNum? =?onBoatPeoNum

this.onBoatSavageNum? =?onBoatSavageNum

}

¿Público? int? getLeftPeo()? {

¿Volver? leftPeo

}

¿Público? ¿Vacío? setLeftPeo(int?leftPeo)? {

¿Esto.Se fuePeo? =?leftPeo

}

¿Público? int? getRightPeo()? {

¿Volver? rightPeo

}

¿Público? ¿Vacío? setRightPeo(int?rightPeo)? {

Esto, ¿verdad? =?rightPeo

}

¿Público? int? getLeftSavage()? {

¿Volver? leftSavage

}

¿Público? ¿Vacío? setLeftSavage(int?leftSavage)? {

¿Esto. =?leftSavage

}

¿Público? int? getRightSavage()? {

¿Volver? rightSavage

}

¿Público? ¿Vacío? setRightSavage(int?rightSavage)? {

¿Verdaderamente salvaje? =?rightSavage

}

@Override

¿Público? ¿Cadena? aCadena()? {

¿Volver? leftPeo+","+leftSavage+","+rightPeo+","+rightSavage+","+CURR_STATE;

}

¿Público? int? obtenerCURR_STATE()? {

¿Volver? Estado de la moneda;

}

¿Público? ¿Vacío? setCURR_STATE(int?cURR_STATE)? {

¿CURR_STATE? =?Estado de la moneda;

}

¿Público? int? getStateBoatLeft()? {

¿Volver? status_ship_left;

}

¿Público? int? getStateBoatRight()? {

¿Volver? State_ship_right;

}

¿Público? int? calcCheckSum()? {

¿Volver? 1 * get curr _ STATE()+10 * getLeftPeo()+100 * getLeftSavage()+1000 * getRightPeo()+10000 * getRightSavage();

}

¿Público? ¿Vacío? agregarCheckSum()? {

int? ¿Suma de comprobación? =?calcCheckSum();

nodesCheckSum.add(checksum);

}

¿Público? ¿Booleano? ha visitado()? {

int? ¿suma? =?calcCheckSum();

¿Para qué? (entero?suma de comprobación?:?nodosChe

ckSuma)? {

if(suma de comprobación==suma)? ¿devolver? Real;

}

¿Devolución? Falso;

}

¿Público? lista<inteteger>? getNodesCheckSum()? {

¿Volver? nodesCheckSum

}

¿Público? int? getOnBoatPeoNum()? {

¿Volver? onBoatPeoNum

}

¿Público? ¿Vacío? setOnBoatPeoNum(int?onBoatPeoNum)? {

¿este.onBoatPeoNum? =?onBoatPeoNum

}

¿Público? int? getOnBoatSavageNum()? {

¿Volver? onBoatSavageNum

}

¿Público? ¿Vacío? setonboatsuagnum(int?onBoatSavageNum)? {

¿este.onBoatSavageNum? =?onBoatSavageNum

}

}