public static IReadOnlyCollection <MCState> GetNextStates(MCState c) { var states = new List <MCState>(); if (c.IsBoatOnWest) { states.Add(new MCState(c.WestMissioners - 2, c.WestCannibals, false)); states.Add(new MCState(c.WestMissioners - 1, c.WestCannibals, false)); states.Add(new MCState(c.WestMissioners - 1, c.WestCannibals - 1, false)); states.Add(new MCState(c.WestMissioners, c.WestCannibals - 2, false)); states.Add(new MCState(c.WestMissioners, c.WestCannibals - 1, false)); } else { states.Add(new MCState(c.WestMissioners + 2, c.WestCannibals, true)); states.Add(new MCState(c.WestMissioners + 1, c.WestCannibals, true)); states.Add(new MCState(c.WestMissioners + 1, c.WestCannibals + 1, true)); states.Add(new MCState(c.WestMissioners, c.WestCannibals + 2, true)); states.Add(new MCState(c.WestMissioners, c.WestCannibals + 1, true)); } return(states.Where(s => s.IsValid()).ToArray()); }
public static bool IsSolved(MCState state) => state.EastMissioners == MCState.MaxCount && state.EastCannibals == MCState.MaxCount;
public bool Equals(MCState other) => WestMissioners == other.WestMissioners && WestCannibals == other.WestCannibals && EastMissioners == other.EastMissioners && EastCannibals == other.EastCannibals && IsBoatOnWest == other.IsBoatOnWest;