¿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
}
}