示例#1
0
        public static string BFS(IGraphVertex startVertex, List <IGraphVertex> destinationVertices, IGraph graph)
        {
            IBFSSearcher searcher = new BFSSearcher(startVertex, destinationVertices, graph);

            searcher.BFS();
            return(searcher.PathToString());
        }
示例#2
0
        /// <summary>
        /// Compare the solvers we created by using the adapter desing pattern between
        /// the maze and searchable.
        /// </summary>
        static void CompareSolvers()
        {
            DFSMazeGenerator       dfsMaze = new DFSMazeGenerator();
            Maze                   maze    = dfsMaze.Generate(100, 100);
            ISearchable <Position> adapt   = new MazeToSearchableAdapter(maze);
            BFSSearcher <Position> bfs     = new BFSSearcher <Position>();
            DFSSearcher <Position> dfs     = new DFSSearcher <Position>();

            //Console.WriteLine(maze);
            bfs.Search(adapt);
            Console.WriteLine("Best First Search evaluated {0} nodes.", bfs.GetNumberOfNodesEvaluated());
            dfs.Search(adapt);
            Console.WriteLine("DFS evaluated {0} nodes.", dfs.GetNumberOfNodesEvaluated());
        }
示例#3
0
        public static void CompareSolvers()
        {
            DFSMazeGenerator mazeGen = new DFSMazeGenerator();
            Maze             maze    = mazeGen.Generate(10, 10);
            SearchableMaze   sm      = new SearchableMaze(maze);

            Console.WriteLine(maze);
            BFSSearcher bfs         = new BFSSearcher();
            DFSSearcher dfs         = new DFSSearcher();
            Solution    BFSSolution = bfs.search(sm);
            Solution    DFSSolution = dfs.search(sm);
            // Console.WriteLine($"Nodes: {BFSNodes}");
            // Console.WriteLine($"Nodes: {DFSNodes}");
            int BFSNodes = bfs.getNumberOfNodesEvaluated();
            int DFSNodes = dfs.getNumberOfNodesEvaluated();
        }
示例#4
0
        /// <summary>
        /// Gets the algorithm th solve a maze.
        /// </summary>
        /// <param name="algorithm">The algorithm.</param>
        /// <returns></returns>
        private static ISearcher <Position> GetAlgorithm(byte algorithm)
        {
            ISearcher <Position> searcher;

            switch (algorithm)
            {
            case 0:
                searcher = new BFSSearcher <Position>();
                break;

            case 1:
                searcher = new DFSSearcher <Position>();
                break;

            default:
                throw new ArgumentException(string.Format("Unknown algorithm signifier \"{0}\"", algorithm));
            }
            return(searcher);
        }
示例#5
0
        /// <summary>
        /// Compares the solvers.
        /// </summary>
        /// <param name="row">The row.</param>
        /// <param name="col">The col.</param>
        public static void CompareSolvers(int row, int col)
        {
            DFSMazeGenerator generator = new DFSMazeGenerator();
            Maze             maze      = generator.Generate(row, col);

            Console.WriteLine(maze.ToString());
            ISearchable <Position> searchable = new MazeAdapter(maze);

            ISearcher <Position> searcher = new BFSSearcher <Position>();
            Solution <Position>  solution = searcher.Search(searchable);

            Console.WriteLine("BFS solved the maze with {0} evaluated nodes",
                              searcher.GetNumberOfNodesEvaluated());

            searcher = new DFSSearcher <Position>();
            solution = searcher.Search(searchable);
            Console.WriteLine("DFS solved the maze with {0} evaluated nodes",
                              searcher.GetNumberOfNodesEvaluated());

            Console.WriteLine("");
        }
示例#6
0
        public override string Execute(string[] args, Socket client = null)
        {
            string name      = args[0];
            int    algorithm = int.Parse(args[1]);
            Maze   m         = model.GetMazeByName(name);

            if (m == null)
            {
                return("No Such Maze");
            }
            Solution sol = model.GetMazeSolution(name);

            if (sol == null)
            {
                ISearcher      searcher;
                SearchableMaze sm = new SearchableMaze(m);
                if (algorithm == 1)
                {
                    searcher = new DFSSearcher();
                }

                else if (algorithm == 0)
                {
                    searcher = new BFSSearcher();
                }
                else
                {
                    return(null);
                }
                sol      = model.search(sm, searcher);
                sol.Name = name;
                model.AddMazeSolution(name, sol);
            }
            string jsonSol = sol.toJSON();

            SendMessageToClient(jsonSol, client);
            return(jsonSol);
        }
示例#7
0
        /// <summary>
        /// Solves the game.
        /// </summary>
        /// <param name="s">The s.</param>
        /// <param name="algo">The algo.</param>
        /// <returns></returns>
        public String SolveGame(String s, String algo)
        {
            if (!GameDictionary.ContainsKey(s))
            {
                return("not such maze");
            }
            Maze maze = GameDictionary[s];
            ISearchable <Position> searchable = new MazeAdapter(maze);
            ISearcher <Position>   searcher;

            if (algo.Equals("BFS"))
            {
                searcher = new BFSSearcher <Position>();
            }
            else
            {
                searcher = new DFSSearcher <Position>();
            }

            Solution <Position> solution = searcher.Search(searchable);

            return(ConvertToString(solution));
        }