private void aStarButton_Click(object sender, EventArgs e)
 {
     if (isMaze1)
     {
         Maze m = new Maze(maze1Char);
         Artificial_Intelligence ai = new Artificial_Intelligence();
         SetGoalMaze();
         ai.SetGoalState(goalState);
         ai.AStar(m);
         currentPositions = ai.GetPositions();
         solution         = ai.GetSolution();
         UpdateGUI();
     }
     else if (isMaze2)
     {
         Maze m = new Maze(maze2Char);
         Artificial_Intelligence ai = new Artificial_Intelligence();
         SetGoalMaze();
         ai.SetGoalState(goalState);
         ai.AStar(m);
         currentPositions = ai.GetPositions();
         solution         = ai.GetSolution();
         UpdateGUI();
     }
     else if (isMaze3)
     {
         Maze m = new Maze(maze3Char);
         Artificial_Intelligence ai = new Artificial_Intelligence();
         SetGoalMaze();
         ai.SetGoalState(goalState);
         ai.AStar(m);
         currentPositions = ai.GetPositions();
         solution         = ai.GetSolution();
         UpdateGUI();
     }
 }
        static void Main(string[] args)
        {
            /* Creating the variables used within the main program
             * Choice -> getting the user input for the menu
             * maze -> initial maze (the beginning)
             * goalState -> creating the goal maze for the AI
             */

            char[,] goalState = new char[20, 20];
            int choice;


            char[,] maze = new char[20, 20] {
                { 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X' },
                { 'X', '-', 'X', '-', 'X', '-', '-', 'X', '-', 'X', 'X', 'X', 'X', 'X', 'X', '-', 'X', '-', 'X', 'X' },
                { 'E', '-', '-', '-', 'X', 'X', '-', '-', '-', '-', 'X', 'X', 'X', '-', '-', '-', 'X', '-', '-', 'X' },
                { 'X', 'X', 'X', '-', 'X', '-', 'X', 'X', '-', 'X', 'X', '-', 'X', '-', 'X', '-', 'X', 'X', '-', 'X' },
                { 'X', 'X', '-', '-', 'X', '-', '-', '-', '-', '-', 'X', '-', 'X', 'X', 'X', '-', '-', '-', '-', 'X' },
                { 'X', '-', '-', 'X', 'X', '-', 'X', 'X', 'X', 'X', 'X', '-', '-', '-', '-', 'X', 'X', '-', 'X', 'X' },
                { 'X', 'X', '-', 'X', 'X', '-', 'X', '-', 'X', 'X', 'X', 'X', '-', 'X', 'X', 'X', 'X', '-', '-', 'X' },
                { 'X', '-', '-', '-', '-', '-', 'X', '-', '-', '-', '-', '-', '-', '-', '-', 'X', 'X', 'X', '-', 'X' },
                { 'X', '-', 'X', '-', 'X', '-', '-', '-', 'X', 'X', '-', 'X', '-', 'X', '-', 'X', 'X', '-', '-', 'X' },
                { 'X', 'X', 'X', '-', 'X', '-', 'X', 'X', 'X', '-', '-', 'X', '-', 'X', 'X', 'X', 'X', '-', 'X', 'X' },
                { 'X', '-', 'X', '-', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', '-', '-', '-', '-', 'X', '-', 'X', 'X' },
                { 'X', '-', 'X', '-', 'X', '-', 'X', '-', '-', 'X', 'X', 'X', 'X', 'X', 'X', '-', '-', '-', '-', 'X' },
                { 'X', '-', '-', '-', 'X', '-', '-', 'X', '-', '-', 'X', '-', '-', '-', 'X', '-', 'X', 'X', '-', 'X' },
                { 'X', 'X', '-', 'X', 'X', '-', 'X', 'X', '-', 'X', 'X', '-', 'X', 'X', '-', '-', 'X', '-', '-', 'X' },
                { 'X', '-', '-', '-', '-', '-', 'X', '-', '-', '-', 'X', '-', 'X', 'X', 'X', '-', 'X', '-', 'X', 'X' },
                { 'X', '-', 'X', '-', 'X', '-', 'X', '-', 'X', '-', 'X', '-', '-', '-', 'X', '-', 'X', '-', 'X', 'X' },
                { 'X', '-', 'X', '-', 'X', '-', '-', '-', 'X', '-', 'X', '-', 'X', '-', 'X', 'X', '-', '-', '-', 'X' },
                { 'X', '-', '-', '-', 'X', '-', 'X', '-', 'X', '-', '-', '-', 'X', '-', 'X', 'X', '-', 'X', '-', 'X' },
                { 'X', '-', 'X', '-', '-', '-', 'X', '-', 'X', 'X', '-', 'X', 'X', '-', '-', '-', '-', 'X', 'X', 'X' },
                { 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'C', 'X', 'X', 'X' }
            };

            // A test maze to make sure it solves for the optimal path

            /*
             * char[,] maze = new char[20, 20] {
             *  { 'X', 'E', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X'},
             *  { 'X', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', 'X', 'X', 'X', 'X'},
             *  { 'X', '-', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', '-', 'X', 'X', 'X', 'X'},
             *  { 'X', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', 'X', 'X', 'X', '-', 'X', 'X', 'X', 'X'},
             *  { 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', '-', 'X', 'X', 'X', '-', 'X', 'X', 'X', 'X'},
             *  { 'X', 'X', 'X', '-', '-', '-', 'X', '-', '-', '-', 'X', '-', 'X', 'X', 'X', '-', 'X', 'X', 'X', 'X'},
             *  { 'X', 'X', 'X', '-', 'X', '-', 'X', '-', 'X', '-', 'X', '-', 'X', 'X', 'X', '-', 'X', 'X', 'X', 'X'},
             *  { 'X', 'X', 'X', '-', 'X', '-', 'X', '-', 'X', '-', 'X', '-', 'X', 'X', 'X', '-', 'X', 'X', 'X', 'X'},
             *  { 'X', 'X', 'X', '-', 'X', '-', 'X', '-', 'X', '-', 'X', '-', 'X', 'X', 'X', '-', 'X', 'X', 'X', 'X'},
             *  { 'X', 'X', 'X', '-', 'X', '-', 'X', '-', 'X', '-', 'X', '-', 'X', 'X', 'X', '-', 'X', 'X', 'X', 'X'},
             *  { 'X', 'X', 'X', '-', 'X', '-', 'X', '-', 'X', '-', 'X', '-', 'X', 'X', 'X', '-', 'X', 'X', 'X', 'X'},
             *  { 'X', 'X', 'X', '-', 'X', '-', 'X', '-', 'X', '-', 'X', '-', 'X', 'X', 'X', '-', 'X', 'X', 'X', 'X'},
             *  { 'X', 'X', 'X', '-', 'X', '-', 'X', '-', 'X', '-', 'X', '-', 'X', 'X', 'X', '-', 'X', 'X', 'X', 'X'},
             *  { 'X', 'X', 'X', '-', 'X', '-', 'X', '-', 'X', '-', 'X', '-', 'X', 'X', 'X', '-', 'X', 'X', 'X', 'X'},
             *  { 'X', 'X', 'X', '-', 'X', '-', 'X', '-', 'X', '-', 'X', '-', 'X', 'X', 'X', '-', 'X', 'X', 'X', 'X'},
             *  { 'X', 'X', 'X', '-', 'X', '-', '-', '-', 'X', '-', '-', '-', 'X', 'X', 'X', '-', 'X', 'X', 'X', 'X'},
             *  { '-', '-', '-', '-', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', '-', 'X', 'X', 'X', 'X'},
             *  { '-', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', '-', 'X', 'X', 'X', 'X'},
             *  { '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', 'X', 'X', 'X', 'X'},
             *  { 'X', 'X', 'X', 'C', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X'}
             * };
             */

            // generating the goal maze by replacing the original maze 'E' with 'C' and the 'C' with '-'
            for (int i = 0; i < maze.GetLength(0); i++)
            {
                for (int j = 0; j < maze.GetLength(1); j++)
                {
                    if (maze[i, j] == 'E')
                    {
                        goalState[i, j] = 'C';
                    }
                    else if (maze[i, j] == 'C')
                    {
                        goalState[i, j] = '-';
                    }
                    else
                    {
                        goalState[i, j] = maze[i, j];
                    }
                }
            }


            choice = GetInput();

            Console.WriteLine("\n************ Start ************");
            if (choice == 1)
            {
                Maze m = new Maze(maze);
                Artificial_Intelligence ai = new Artificial_Intelligence();
                ai.SetGoalState(goalState);
                ai.BFS(m);
            }
            else if (choice == 2)
            {
                Maze m = new Maze(maze);
                Artificial_Intelligence ai = new Artificial_Intelligence();
                ai.SetGoalState(goalState);
                ai.UFS(m);
            }
            else if (choice == 3)
            {
                Maze m = new Maze(maze);
                Artificial_Intelligence ai = new Artificial_Intelligence();
                ai.SetGoalState(goalState);
                ai.AStar(m);
            }
            else
            {
                Console.WriteLine("Error with Choice");
            }
        }