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); }
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); }
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); }