Я нещодавно грав у випуску «Логічного подорожі Zoombinis» і намагаюся реалізувати деякі комп’ютерні алгоритми, здатні вирішувати різні головоломки. Я застряг у тому, як наблизитись до головоломки паромного капітана капітана Каджуна.
Для незнайомих, Zoombini - істота з чотирма атрибутами: волосся, очі, ніс і стопи. Кожен з цих атрибутів має 5 можливих значень; наприклад, ногами Zoombini можуть бути колеса, роликові ковзани, кросівки, пружина або гвинт. Ось приклад Zoombini з брудним волоссям, окулярами, зеленим носом і кросівками:

У головоломці на поромі завдання полягає в тому, щоб організувати колекцію з 16 Zoombinis на 16 місць поромного човна. Домовленість повинна підкорятися правилу, згідно з яким будь-які два ортогонально сусідніх місця повинні бути зайняті Zoombinis, які мають принаймні одну особливість. Якщо два зумбіни мають різне волосся, різні очі, різний ніс і різні стопи один від одного, вони можуть не сидіти поруч.
Розташування сидінь змінюється за рівнем; задля конкретності, зосередимось на рівні «Дуже важко», в якому 16 місць розташовані в сітці 4 на 4. Ось приклад, коли 15 Zoombinis були законно сиділи, але остаточний Zoombini, що стоїть на лаві підсудних, не може бути розміщений на останньому порожньому сидінні, оскільки вона не має жодних особливостей із Zoombini праворуч:

Є 16! ≈ 21 трлн можливих призначень Zoombinis на місця. Тому просто пробігнути всі можливі завдання, щоб побачити, чи законний це не буде практичним. Які евристики я можу використати, щоб розумно підійти до цієї проблеми?
Subgraph Isomorphism Problem. Проблема полягає у пошуку одного графа в іншому графіку. У вашому випадку підграфом буде розміщення (краї є суміжними місцями), тоді як батьківський графік буде zoombinis, де з'єднаннями буде наявність спільної ознаки. Зауважте, що загалом проблема є NP-повною, і зазвичай це робиться і зворотним відстеженням, однак для деяких особливих випадків (з яких ваш графік цілком може бути) можливі поліномічні або навіть лінійні рішення.