Пример #1
0
        private EstadoMissionarioCanibal TentarLevarUmDeCada()
        {
            EstadoMissionarioCanibal novoEstado = null;

            if (barco == MARGEM_INICIAL)
            {
                // tenta levar um de cada da margem inicial para a margem final
                if (missionariosMargemInicial >= 1 && canibaisMargemInicial >= 1)
                {
                    novoEstado = new EstadoMissionarioCanibal(missionariosMargemInicial - 1, canibaisMargemInicial - 1, MARGEM_FINAL, "Levar um de cada para final");
                }
            }
            else
            {
                // tenta levar um de cada da margem final para a margem inicial
                int missionariosMargemFinal = 3 - missionariosMargemInicial;
                int canibaisMargemFinal     = 3 - canibaisMargemInicial;
                if (missionariosMargemFinal >= 1 && canibaisMargemFinal >= 1)
                {
                    novoEstado = new EstadoMissionarioCanibal(missionariosMargemInicial + 1, canibaisMargemInicial + 1, MARGEM_INICIAL, "Levar um de cada para inicial");
                }
            }

            if (novoEstado != null && novoEstado.IsEstadoValido)
            {
                return(novoEstado);
            }
            return(null);
        }
Пример #2
0
        private EstadoMissionarioCanibal TentarLevar2Canibais()
        {
            EstadoMissionarioCanibal novoEstado = null;

            if (barco == MARGEM_INICIAL)
            {
                // tenta levar 2 canibais da margem inicial para a margem final
                if (canibaisMargemInicial >= 2)
                {
                    novoEstado = new EstadoMissionarioCanibal(missionariosMargemInicial, canibaisMargemInicial - 2, MARGEM_FINAL, "Levar 2 canibais para final");
                }
            }
            else
            {
                // tenta levar 2 canibais da margem final para a margem inicial
                int canibaisMargemFinal = 3 - canibaisMargemInicial;
                if (canibaisMargemFinal >= 2)
                {
                    novoEstado = new EstadoMissionarioCanibal(missionariosMargemInicial, canibaisMargemInicial + 2, MARGEM_INICIAL, "Levar 2 canibais para inicial");
                }
            }

            if (novoEstado != null && novoEstado.IsEstadoValido)
            {
                return(novoEstado);
            }
            return(null);
        }
Пример #3
0
        public override bool Equals(object obj)
        {
            if (obj == this)
            {
                return(true);
            }
            EstadoMissionarioCanibal e = (obj as EstadoMissionarioCanibal);

            return(e != null &&
                   e.missionariosMargemInicial == missionariosMargemInicial &&
                   e.canibaisMargemInicial == canibaisMargemInicial &&
                   e.barco == barco);
        }