Tienda

Solo disponible en BuenasTareas
  • Páginas : 4 (770 palabras )
  • Descarga(s) : 0
  • Publicado : 23 de abril de 2010
Leer documento completo
Vista previa del texto
EL PROBLEMA DE LOS MISIONEROS Y CANIBALES
Autor: Javier Navarrete T. (jnavarrete@softein.com)

Tres misioneros y tres caníbales están en una de las márgenes de un río junto a un bote en la quesólo cabe 1 o 2 personas. Hay que encontrar la manera de pasarlos al otro lado del río pero teniendo cuidado que en ningún momento quede un grupo de misioneros junto con un grupo de caníbales, siendo lacantidad de misioneros menor a la de caníbales. DEFINICION DEL PROBLEMA Se debe considerar una secuencia ordenada de 3 números que representarán: la cantidad de misioneros, caníbales y en que orilladel río se encuentran. Por lo tanto, el estado inicial será: 3,3,1. El estado objetivo será: 0,0,0 en la orilla izquierda y 3,3,1 en la orilla derecha. Operadores posibles: Pueden ser que un bote: Nolleva ningún misionero y lleva un caníbal. Lleva 2 misioneros y ningún caníbal. Lleva 2 caníbales y ningún misionero. Lleva 1 caníbal y un misionero. No lleva ningún caníbal y lleva un misionero. Soloestá permitido si hay igual o más misioneros que caníbales en una orilla o no hay misioneros que afectar en una orilla. Se utilizará la búsqueda preferente por profundidad o depth search first.

Enla búsqueda preferente por profundidad siempre se expande uno de los nodos que se encuentre en los más profundo de árbol, por lo tanto los nodos sucesores estarán a profundidades cada vez mayores.DESARROLLO EN PROLOG:
/* Problema de los Caníbales y Misioneros usando búsqueda Depth First Desarrollado en : Visual Prolog v. 5.1 (versión gratuita de Prolog (VIP.exe) bajada de : www.visual-prolog.com). Autor : Javier Navarrete T. ******************************************************************************************** */ domains orilla=orilla(byte,byte,byte) bote=bote(byte,byte)hecho=hecho(orilla,orilla) database - canymis hecho(orilla,orilla) predicates ejecutar. profundidad(orilla,orilla). ejecutar_movimiento(orilla,orilla,orilla,orilla). movimiento(orilla,orilla,orilla,orilla)....
tracking img