1
resposta

[Dúvida] Possível resolução do caso dos missionários e canibais

Em linguagem parcialmente natural, fiz algo assim:

Onde L indica Left, R, Right, e S indica State.

Estado original:

S1: (3C,3M)L|(0C,0M)R

1C conduz 1C, e retorna:

S2: (2C,3M)L|(1C,0M)R

1C conduz 1M, e retorna:

S3: (2C,2M)L|(1C,1M)R

1C conduz 1M, e retorna:

S4: (2C,1M)L|(1C,2M)R

1C conduz 1C, e retorna:

S5: (1C,1M)|(2C,2M)R

1C conduz 1M, e fica:

(0C,0M)L|(3C,3M)R.

Prova/Dica: manter os totais sempre em 3 para cada classe, somando (n)C Left + n(C) Right e (n)M Left + (n)M Right.
Conclusão: Ao que parece, em nenhum momento o número de C ficou maior que o número de M.

Está correta essa forma de fazer?

1 resposta

Oi, Joao Batista, tudo bem?

Achei sensacional a sua iniciativa de usar uma notação formal (S para Estados, L/R para as margens). Isso demonstra um Pensamento Computacional afiado na etapa de Abstração! É exatamente isso que buscamos no curso.

Analisando a sua lógica, notei um detalhe crucial no passo S4 que infringe uma das regras de segurança do problema.

Vamos olhar de perto o estado que você descreveu em S4:

S4: (2C, 1M) L | (1C, 2M) R

Observe a Margem Esquerda (L): você deixou 2 Canibais e apenas 1 Missionário.
A regra do problema diz: "O número de canibais não pode ser superior ao número de missionários em nenhuma das margens" (senão, o missionário vira jantar! rsrs).

Neste caso, como , o jogo terminaria aqui com uma derrota.

Onde está o desafio?
A grande "pegadinha" desse problema é que, em certos momentos, você precisa trazer pessoas de volta para manter o equilíbrio, o que faz a solução ser um pouco mais longa (geralmente em torno de 11 passos, como mencionado na aula).

Bons estudos!

Sucesso

Imagem da comunidade