You are on page 1of 18

Granjero, Lobo, Cabra,

Repollo
El Acertijo
Hace mucho tiempo un granjero fue al mercado y compró un lobo, una
cabra y un repollo. Para volver a su casa tenía que cruzar un río. El
granjero dispone de una barca para cruzar a la otra orilla, pero en la
barca solo caben él y una de sus compras.
Si el lobo se queda solo con la cabra se la come, si la cabra se queda
sola con el repollo se lo come.
¿Qué puede hacer para cruzar el río con sus compras?
Representación de estado
Suponiendo que el granjero y sus compras están en el lado oeste del
río. Usaremos la siguiente tupla para representar el estado: (G,L,C,R)
Así por ejemplo:
(o,o,o,o)
• La primera “o” indica que el granjero esta en el oeste
• La segunda “o” indica que el lobo esta en el oeste
• La tercera “o” indica que la cabra esta en el oeste
• La cuarta “o” indica que el repollo esta en el oeste
Representación de estado
Así por ejemplo:
(o,e,o,e)
• La “o” en la primera ubicación indica que el granjero esta en el oeste
• La “e” en la segunda ubicación indica que el lobo esta en el este
• La “o” en la tercera ubicación indica que la cabra esta en el oeste
• La “e” en la cuarta ubicación indica que el repollo esta en el este
Estado inicial y estado meta
Estado inicial:
(o,o,o,o)

Estado meta:
(e,e,e,e)
Operadores
1. El granjero cruza solo
2. El granjero cruza con el lobo
3. El granjero cruza con la cabra
4. El granjero cruza con el repollo
Algoritmo DFS (Depth First Search)
• En una cola colocar al estado inicial
• Mientras la cola no este vacía
• Colocar en orden al inicio de la cola a los sucesores del estado
• Sacar el primer elemento de la cola, si el elemento que sale de la cola es un
estado meta, fin del algoritmo
Contro de estados repetidos: No se debe generar un nodo si es que
este ya existe en la ruta hacia la raíz
(GLCR) (oooo) Cola = {(o,o,o,o)}
(GLCR) (oooo) Cola = {(eoeo)}

(eoeo)
(GLCR) (oooo) Cola = {(ooeo)}

(eoeo)

(ooeo)
(GLCR) (oooo) Cola = {(eeeo),(eoee)}

(eoeo)

(ooeo)

(eeeo) (eoee)
(GLCR) (oooo) Cola = {(oeoo),(eoee)}

(eoeo)

(ooeo)

(eeeo) (eoee)

(oeoo)
(GLCR) (oooo) Cola = {(eeoe),(eoee)}

(eoeo)

(ooeo)

(eeeo) (eoee)

(oeoo)

(eeoe)
(GLCR) (oooo) Cola = {(oeoe),(oooe),(eoee)}

(eoeo)

(ooeo)

(eeeo) (eoee)

(oeoo)

(eeoe)

(oeoe) (oooe)
(GLCR) (oooo) Cola = {(eeee),(oooe),(eoee)}

(eoeo)

(ooeo)

(eeeo) (eoee)

(oeoo)

(eeoe)

(oeoe) (oooe)

(eeee)
(GLCR) (oooo) Cola = {(oooe),(eoee)}
(eeee)
(eoeo)

Sale de la cola y Es Meta


(ooeo)

(eeeo) (eoee)

(oeoo)

(eeoe)

(oeoe) (oooe)

(eeee)
(GLCR) (oooo) Cola = {(oooe),(eoee)}
(eeee)
(eoeo)

Sale de la cola y Es Meta


(ooeo)

(eeeo) (eoee) Solución:


-Granjero cruza con cabra
(oeoo) -Granjero cruza solo
-Granjero cruza con lobo
(eeoe) -Granjero cruza con cabra
-Granjero cruza con repollo
(oeoe) (oooe) -Granjero cruza solo
-Granjero cruza con cabra

(eeee)
Actividad Propuesta
Si el orden de los operadores es el siguiente:
1. El granjero cruza con el repollo
2. El granjero cruza con el lobo
3. El granjero cruza con la cabra
4. El granjero cruza solo
Determine la secuencia para una solución con el algoritmo DFS.

You might also like