Exemple #1
0
        public static JarsState Fill(int jar, JarsState currentState)
        {
            var newState = currentState.Clone();

            newState.Amount[jar] = JarsState.Capacity[jar];
            newState.Parent      = currentState;
            return(newState);
        }
Exemple #2
0
        public static JarsState EmptyJar(int jar, JarsState currentState)
        {
            var newState = currentState.Clone();

            newState.Amount[jar] = 0;
            newState.Parent      = currentState;
            return(newState);
        }
Exemple #3
0
        public static JarsState EmptyFromTo(int from, int to, JarsState currentState)
        {
            var newState = currentState.Clone();

            var spaceLeft       = JarsState.Capacity[to] - currentState.Amount[to];
            var availableToPour = currentState.Amount[from];
            var pourAmount      = (availableToPour < spaceLeft) ? availableToPour : spaceLeft;

            newState.Amount[to]   += pourAmount;
            newState.Amount[from] -= pourAmount;
            newState.Parent        = currentState;

            return(newState);
        }
Exemple #4
0
        private static void SolveMeasureByJars()
        {
            var initialState = new JarsState(0, 0, 0);

            var breadthFirstSolution = SearchState.Search(initialState, frontier => frontier[0]);

            foreach (var solutionState in breadthFirstSolution)
            {
                Console.WriteLine("Hurray !!!");
                Console.WriteLine(AbstractState.BuildSequence(solutionState));
            }

            var depthFirstSolution = SearchState.Search(initialState, frontier => frontier[frontier.Count - 1]);

            foreach (var solutionState in depthFirstSolution)
            {
                Console.WriteLine("Hurray !!!");
                Console.WriteLine(AbstractState.BuildSequence(solutionState));
            }
        }