public static string BFS(IGraphVertex startVertex, List <IGraphVertex> destinationVertices, IGraph graph) { IBFSSearcher searcher = new BFSSearcher(startVertex, destinationVertices, graph); searcher.BFS(); return(searcher.PathToString()); }
/// <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()); }
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(); }
/// <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); }
/// <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(""); }
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); }
/// <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)); }