Ejemplo n.º 1
0
        static bool solve(ref CoinRow c) // ends must be 121 - 121 OR 2 - 2 |||||| 8 minimum + 4's
        {
            if (c.startingCoins() % 2 != 0)
            {
                return(false);
            }

            if (!c.movesLeft())
            {
                if (c.completed())
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            for (int i = 0; i < c.count() - 1; i++)
            {
                if (c.canJumpRight(i) != -1)
                {
                    c.doJumpRight(i);
                    if (solve(ref c))
                    {
                        return(true);
                    }
                    else
                    {
                        c.undo();
                    }
                }
                if (c.canJumpLeft(i) != -1)
                {
                    c.doJumpLeft(i);
                    if (solve(ref c))
                    {
                        return(true);
                    }
                    else
                    {
                        c.undo();
                    }
                }
            }
            return(false);
        }
Ejemplo n.º 2
0
        static void Main(string[] args)
        {
            List <int> solutions = new List <int>();

            for (int i = 1; i < 21; i++)
            {
                CoinRow c = new CoinRow(i);
                if (solve(ref c))
                {
                    solutions.Add(i);
                }
            }
            Console.WriteLine("Number of coins with solutions");
            foreach (int i in solutions)
            {
                Console.Write("{0} ", i);
            }
            Console.ReadKey();
        }
Ejemplo n.º 3
0
        static void Main(string[] args)
        {
            int N = 0;

            Console.WriteLine("Welcome to Dynamic Programming!!");
            Console.WriteLine("0. Read Me");
            Console.WriteLine("1. Generate Fibonacci Series");
            Console.WriteLine("2. Coin Row Problem");
            Console.WriteLine("3. Change Making Problem");
            Console.WriteLine("4. Coin Collecting Problem");
            Console.WriteLine("5. Rod Cutting Problem");


            string option = Console.ReadLine();

            switch (option)
            {
            case "0":
                Console.WriteLine("1. Fibonacci Series");
                Console.WriteLine("2. Coin Row Problem");
                Console.WriteLine("3. Change Making Problem");
                Console.WriteLine("4. Coin Collecting Problem");
                Console.WriteLine("5. Rod Cutting Problem");
                string HelpOption = Console.ReadLine();
                switch (HelpOption)
                {
                case "1":
                    //read from file rather than hard coding
                    Console.WriteLine("Fibonacci series is a series which is of the sequence 1,1,2,3,5");
                    Console.WriteLine("in which Nth fibonacci number is got by adding N-1 and N-2 ");
                    Console.WriteLine("fibonacci numbers. Here, We use Top-Down Dynamic Programming");
                    Console.WriteLine("approach to solve the problem");
                    break;

                case "2":
                    //to be implemented.
                    Console.WriteLine("");
                    break;

                case "3":
                    //to be implemented.
                    Console.WriteLine("");
                    break;

                case "4":
                    //to be implemented.
                    Console.WriteLine("");
                    break;

                default:
                    Console.WriteLine("Invalid choice");
                    break;
                }
                break;

            case "1":
                Console.WriteLine("Enter N for which Fibonacci series is to be calculated");
                try
                {
                    N = Convert.ToInt32(Console.ReadLine());
                }
                catch (Exception e)
                {
                    Console.WriteLine("Exception in data: " + e.Message);
                    Console.ReadKey();
                    Environment.Exit(1);
                }
                Fibonacci fib     = new Fibonacci(N);
                int       fibonac = fib.GenerateFib();
                Console.WriteLine("Fib(" + N + ")=" + fibonac);
                Console.ReadKey();
                break;

            case "2":
                Console.WriteLine("Enter number of coins");
                try
                {
                    N = Convert.ToInt32(Console.ReadLine());
                }
                catch (Exception e)
                {
                    Console.WriteLine("Exception in data: " + e.Message);
                    Console.ReadKey();
                    Environment.Exit(1);
                }
                int[] CoinValues = new int[N];
                Console.WriteLine("Enter " + N + " values of Adjacent coins");
                for (int i = 0; i < N; i++)
                {
                    try
                    {
                        Console.Write((i + 1) + " coin value: ");
                        CoinValues[i] = Convert.ToInt32(Console.ReadLine());
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine("Exception in data: " + e.Message);
                        Console.ReadKey();
                        Environment.Exit(1);
                    }
                }
                CoinRow Coins       = new CoinRow(N, CoinValues);
                int     MaxSumValue = Coins.CalculateMaxValue();
                Console.WriteLine("Maximum value of the Coins by not choosing adjacent coins is: " + MaxSumValue);
                break;

            case "3":
                Console.WriteLine("Enter Number of coins");
                try
                {
                    N = Convert.ToInt32(Console.ReadLine());
                }
                catch (Exception e)
                {
                    Console.WriteLine("Exception in data: " + e.Message);
                    Console.ReadKey();
                    Environment.Exit(1);
                }
                int [] CoinValue = new int[N];
                Console.WriteLine("Enter " + N + " values coin values");
                for (int i = 0; i < N; i++)
                {
                    try
                    {
                        Console.Write((i + 1) + " coin value: ");
                        CoinValue[i] = Convert.ToInt32(Console.ReadLine());
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine("Exception in data: " + e.Message);
                        Console.ReadKey();
                        Environment.Exit(1);
                    }
                }
                Console.WriteLine("Enter denomination to be found");
                int Denomination = 0;
                try
                {
                    Denomination = Convert.ToInt32(Console.ReadLine());
                }
                catch (Exception e)
                {
                    Console.WriteLine("Exception in data: " + e.Message);
                    Console.ReadKey();
                    Environment.Exit(1);
                }
                ChangeMaking Chg = new ChangeMaking(N, CoinValue, Denomination);
                int []       ResultDenomination = Chg.CalculateDenominations();
                Console.WriteLine("Total number of coins required: " + ResultDenomination.Count());
                Console.WriteLine("The values of coins are: ");
                foreach (int i in ResultDenomination)
                {
                    Console.Write(i + " ");
                }
                break;

            case "4":
                Console.WriteLine("Enter number of rows");
                int rows = 0, cols = 0;
                try
                {
                    rows = Convert.ToInt32(Console.ReadLine());
                }
                catch (Exception e)
                {
                    Console.WriteLine("Exception in data" + e.Message);
                    Console.ReadKey();
                    Environment.Exit(1);
                }
                Console.WriteLine("Enter number of columns");
                try
                {
                    cols = Convert.ToInt32(Console.ReadLine());
                }
                catch (Exception e)
                {
                    Console.WriteLine("Exception in data" + e.Message);
                    Console.ReadKey();
                    Environment.Exit(1);
                }
                int[,] matrix = new int[rows, cols];
                Console.WriteLine("Enter 1 for rows with coins and 0 otherwise");
                for (int i = 0; i < rows; i++)
                {
                    Console.WriteLine("Row " + (i + 1));
                    for (int j = 0; j < cols; j++)
                    {
                        try
                        {
                            matrix[i, j] = Convert.ToInt32(Console.ReadLine());
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine("Exception in data" + e.Message);
                            Console.ReadKey();
                            Environment.Exit(1);
                        }
                    }
                }
                CoinCollecting CoinCollector = new CoinCollecting(matrix, rows, cols);
                int            coins         = CoinCollector.MaximumCoinsCollected();
                Console.WriteLine("Maximum coins that can be collected by a robot navigating left and down is: " + coins);
                break;

            case "5":
                Console.WriteLine("Enter Length of Rod to be cut");
                try
                {
                    N = Convert.ToInt32(Console.ReadLine());
                }
                catch (Exception e)
                {
                    Console.WriteLine("Exception in data: " + e.Message);
                    Console.ReadKey();
                    Environment.Exit(1);
                }
                int[] RodPrice = new int[N];
                Console.WriteLine("Enter price of Pieces");
                for (int i = 0; i < N; i++)
                {
                    try
                    {
                        Console.Write((i + 1) + " piece's price value: ");
                        RodPrice[i] = Convert.ToInt32(Console.ReadLine());
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine("Exception in data: " + e.Message);
                        Console.ReadKey();
                        Environment.Exit(1);
                    }
                }
                RodCutting         RodCut    = new RodCutting(N, RodPrice);
                Tuple <int[], int> RodPieces = RodCut.CalculateOptimalCuts();
                Console.WriteLine("Total number of cuts required: " + RodPieces.Item1.Count());
                Console.WriteLine("The length of pieces are: ");
                foreach (int i in RodPieces.Item1)
                {
                    Console.Write(i + " ");
                }
                Console.WriteLine("\nMaximum value obtained by cutting rods is:" + RodPieces.Item2);
                break;

            default: Console.WriteLine("Invalid choice");
                break;
            }
            Console.ReadKey();
        }