Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

Missionários e canibais

É possível estabelecer um método/algoritmo para encontrar uma solução com o número mínimo de passos (viagens)?

1 resposta

Olá, Wallace!

Sim, é possível criar um algoritmo para resolver o problema dos missionários e canibais com o número mínimo de passos.

Este tipo de problema é um clássico em lógica de programação e pode ser abordado usando técnicas de busca em grafos, como busca em largura (breadth-first search ou BFS) ou busca em profundidade (depth-first search ou DFS).

Para encontrar a solução ótima, ou seja, com o menor número de passos, a busca em largura é geralmente a mais adequada. Isso ocorre porque ela explora todos os nós em um nível antes de passar para o próximo nível, garantindo que a primeira solução encontrada é a mais curta possível.

Um esboço de como você poderia estruturar o algoritmo usando busca em largura:

  1. Defina o estado inicial: Comece com 3 missionários e 3 canibais na margem esquerda, e o barco também na margem esquerda.

  2. Crie uma fila para explorar os estados: Insira o estado inicial na fila.

  3. Explore os estados: Enquanto a fila não estiver vazia, faça:

    • Retire o primeiro estado da fila.
    • Verifique se é o estado objetivo (todos os missionários e canibais na margem direita). Se for, você encontrou a solução.
    • Gere todos os estados possíveis a partir do estado atual, respeitando as regras do problema (nunca permitir que os canibais superem os missionários em qualquer margem).
    • Para cada novo estado gerado, se ele ainda não foi visitado, adicione-o à fila.
  4. Marque os estados visitados: Para evitar ciclos e otimizar a busca, mantenha um registro dos estados já visitados.

Este algoritmo garantirá que você encontre a solução com o menor número de passos. No entanto, a implementação prática pode variar dependendo da linguagem de programação que você está usando.

Espero ter ajudado e fico à disposição se precisar.

Abraço e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado