示例#1
0
    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());
    }
示例#2
0
 public static bool IsSolved(MCState state)
 => state.EastMissioners == MCState.MaxCount &&
 state.EastCannibals == MCState.MaxCount;
示例#3
0
 public bool Equals(MCState other)
 => WestMissioners == other.WestMissioners &&
 WestCannibals == other.WestCannibals &&
 EastMissioners == other.EastMissioners &&
 EastCannibals == other.EastCannibals &&
 IsBoatOnWest == other.IsBoatOnWest;