He estado jugando la nueva versión de The Logical Journey of the Zoombinis recientemente, y he tratado de implementar algunos algoritmos informáticos que pueden resolver los diversos acertijos. Estoy atrapado en cómo abordar el rompecabezas del ferry del Capitán Cajun.
Para aquellos que no están familiarizados, un Zoombini es una criatura con 4 atributos: cabello, ojos, nariz y pies. Cada uno de esos atributos tiene 5 valores posibles; por ejemplo, los pies de un Zoombini pueden ser ruedas, patines, zapatillas, un resorte o una hélice. Aquí hay un ejemplo de un Zoombini con cabello desordenado, anteojos, nariz verde y zapatillas de deporte:

En el rompecabezas del ferry, la tarea es organizar una colección de 16 Zoombinis en los 16 asientos de un ferry. El acuerdo debe obedecer la regla de que dos asientos ortogonalmente vecinos deben ser ocupados por Zoombinis que compartan al menos una característica. Si dos Zoombinis tienen cabello diferente, ojos diferentes, narices diferentes y pies diferentes entre sí, es posible que no se sienten uno al lado del otro.
La disposición de los asientos cambia por nivel; para concreción, centrémonos en el nivel "Muy difícil", en el que los 16 asientos están dispuestos en una cuadrícula de 4 por 4. Aquí hay un ejemplo donde 15 Zoombinis se han sentado legalmente, pero el Zoombini final parado en el muelle no se puede colocar en el último asiento vacío, porque no compartiría características con el Zoombini a su derecha:

Hay 16! ≈ 21 billones de asignaciones posibles de Zoombinis a asientos. Entonces, simplemente revisar todas las tareas posibles para ver si es legal no será práctico. ¿Cuáles son algunas heurísticas que podría emplear para abordar este problema con sensatez?
Subgraph Isomorphism Problem. El problema es encontrar un gráfico en otro gráfico. En su caso, el subgrafo sería el asiento (los bordes son adyacencias), mientras que el gráfico principal sería el zoombinis, donde las conexiones serían la presencia de un rasgo compartido. Tenga en cuenta que, en general, el problema es NP-completo y generalmente también se realiza retrocediendo, sin embargo, en algunos casos especiales (de los cuales su gráfico puede ser muy bueno), son posibles soluciones polinómicas o incluso lineales.