Eu tenho jogado o relançamento de The Logical Journey of the Zoombinis recentemente e tentando implementar alguns algoritmos de computador que podem resolver os vários quebra-cabeças. Estou preso em como abordar o quebra-cabeça de balsa do capitão Cajun.
Para quem não conhece, um Zoombini é uma criatura com 4 atributos: cabelos, olhos, nariz e pés. Cada um desses atributos possui 5 valores possíveis; por exemplo, os pés de um Zoombini podem ser rodas, patins, tênis, uma mola ou uma hélice. Aqui está um exemplo de um Zoombini com cabelos bagunçados, óculos, nariz verde e tênis:
No quebra-cabeça da balsa, a tarefa é organizar uma coleção de 16 Zoombinis nos 16 assentos de uma balsa. O acordo deve obedecer à regra de que quaisquer dois assentos vizinhos ortogonalmente devem ser ocupados pelo Zoombinis que compartilham pelo menos um recurso. Se dois Zoombinis têm cabelos diferentes, olhos diferentes, narizes diferentes e pés diferentes um do outro, eles podem não se sentar um ao lado do outro.
A disposição dos assentos muda de nível; para concretude, vamos nos concentrar no nível "Muito Duro", no qual os 16 assentos estão dispostos em uma grade de 4 por 4. Aqui está um exemplo em que 15 Zoombinis estavam legalmente sentados, mas o Zoombini final parado no banco dos réus não pode ser colocado no último assento vazio, porque ela não compartilharia nenhum recurso com o Zoombini à sua direita:
São 16! Tr 21 trilhões de atribuições possíveis de Zoombinis aos assentos. Portanto, basta executar todas as tarefas possíveis para ver se é legal não será prático. Quais são algumas heurísticas que eu poderia empregar para abordar esse problema de maneira sensata?
Subgraph Isomorphism Problem
. O problema é encontrar um gráfico em outro gráfico. No seu caso, o subgráfico seria o assento (as bordas são adjacências), enquanto o gráfico pai seria o zoombinis, onde as conexões seriam a presença de uma característica compartilhada. Observe que, em geral, o problema é NP-completo e geralmente é feito também por retrocesso, no entanto, em alguns casos especiais (dos quais seu gráfico pode muito bem ser), são possíveis soluções polinomiais ou mesmo lineares.