Resolução de Problemas - Canibais e Missionários
De Aulas
Afluentes: Inteligência Artificial
Estrutura de Dados
Estrutura de Dados do problema dos Canibais e Missionários
LadoEsquerdo ( Canibais = inteiro Missionarios = inteiro Canoa = booleano )
Na forma de Vetor:
(C, M, J) (3, 3, T)
Observações:
- C = Canibais
- M = Missinários
- J = Jangada (não deu pra colocar C de Canoa)
- T (ou True), a canoa está do lado esquerdo, se do lado direito, então F (False)
- Para saber como está do lado direito, basta calcular:
- C2 = 3 - C
- M2 = 3 - M
- e J = F
Restrições
- Max2 - Máximo de passageiros na canoa é 2 pessoas
- !C>M - Nao pode ter mais canibais que missionários
- 1P - Mínimo de passageiros numa canoa é 1 pessoa
Regras / Métodos
- 1MD - Transportar 1 Missionário para a direita
- 2MD - Transportar 2 Missionários para a direita
- 1CD - Transportar 1 Canibal para a direita
- 2CD - Transportar 2 Canibais para a direita
- CMD - Transportar 1 Canibal e 1 Missionário para a direita
- 1ME - Transportar 1 Missionário para a esquerda
- 2ME - Transportar 2 Missionários para a esquerda
- 1CE - Transportar 1 Canibal para a esquerda
- 2CE - Transportar 2 Canibais para a esquerda
- CME - Transportar 1 Canibal e 1 Missionário para a esquerda
Teste de Mesa e Estados
0. (3, 3, 1, 0, 0, 0) - CMD 1. (2, 2, 0, 1, 1, 1) - 1ME 2. (2, 3, 1, 1, 0, 0) - 2CD 3. (0, 3, 0, 3, 0, 1) - 1CE 4. (1, 3, 1, 2, 0, 0) - 2MD 5. (1, 1, 0, 2, 2, 1) - CME 6. (2, 2, 1, 1, 1, 0) - 2MD 7. (2, 0, 0, 1, 3, 1) - 1CE 8. (3, 0, 1, 0, 3, 0) - 2CD 9. (1, 0, 0, 2, 3, 1) - 1CE 10.(2, 0, 1, 1, 3, 0) - 2CD 11.(0, 0, 0, 3, 3, 1)
Algoritmo
Principal
Inicio Enquanto Não TERMINOU Fazer Operação = LerDoTeclado Se VALIDA(Operacao) Entao Se Operacao == 1M-AB Então LadoA.Missionario-- LadoB.Missionario++ LadoA.Canoa = Falso LadoB.Canoa = Verdadeiro Senão ... // Demais operações Fim Se Fim Se Fim Enquanto Fim
TERMINOU
Inicio Se (LadoB.Canibais == 3) e (LadoB.Missionarios == 3) Então Retorna Verdadeiro Senão Retorna Falso Fim Se Fim
VALIDA
Inicio (operação) Se (operacao == 1M-AB) Então Se LadoA.Missionarios == 0 Então Retorna Falso Fim Se Se (LadoA.Missionarios - 1 < LadoA.Canibais) Então Retorna Falso Fim Se Senão ... // Demais Operações Fim Se Retorna Verdadeiro Fim
Programa
Desenvolver um programa com base na Estrutura de Dados definida e algoritmos apresentados.