Resolução de Problemas - Canibais e Missionários

De Aulas
Revisão de 13h27min de 8 de abril de 2020 por Admin (discussão | contribs)
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)

Afluentes: Inteligência Artificial

Estrutura de Dados

Estrutura de Dados do problema dos Canibais e Missionários

LadoA (
	Canibais = 3
	Missionarios = 3
	Canoa = verdadeiro
)
LadoB (
	Canibais = 0
	Missionarios = 0
	Canoa = falso
)

Na forma de Vetor:

(C, M, J, C, M, J)
(3, 3, 1, 0, 0, 0)

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

  • 1M-AB - Transportar 1 Missionario de A para B
  • 2M-AB - Transportar 2 Missionarios de A para B
  • 1C-AB - Transportar 1 Canibal de A para B
  • 2C AB - Transportar 2 Canibais de A para B
  • CM-AB - Transportar 1 Canibal e 1 Miss. de A para B
  • 1M-BA - Transportar 1 Missionario de B para A
  • 2M-BA - Transportar 2 Missionarios de B para A
  • 1C-BA - Transportar 1 Canibal de B para A
  • 2C-BA - Transportar 2 Canibais de B para A
  • CM-BA - Transportar 1 Canibal e 1 Miss. de B para A

Teste de Mesa e Estados

0. (3, 3, 1, 0, 0, 0) - CM-AB
1. (2, 2, 0, 1, 1, 1) - 1M-BA
2. (2, 3, 1, 1, 0, 0) - 2C-AB
3. (0, 3, 0, 3, 0, 1) - 1C-BA
4. (1, 3, 1, 2, 0, 0) - 2M-AB
5. (1, 1, 0, 2, 2, 1) - CM-BA
6. (2, 2, 1, 1, 1, 0) - 2M-AB
7. (2, 0, 0, 1, 3, 1) - 1C-BA
8. (3, 0, 1, 0, 3, 0) - 2C-AB
9. (1, 0, 0, 2, 3, 1) - 1C-BA
10.(2, 0, 1, 1, 3, 0) - 2C-AB
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 em Java com base na Estrutura de Dados definida e algoritmos apresentados.