diff --git a/pomelovsd/ExitMaze/Strategies/A*.py b/pomelovsd/ExitMaze/Strategies/A*.py new file mode 100644 index 0000000..e69de29 diff --git a/pomelovsd/ExitMaze/Strategies/BFS.py b/pomelovsd/ExitMaze/Strategies/BFS.py new file mode 100644 index 0000000..e69de29 diff --git a/pomelovsd/ExitMaze/Strategies/DFS.py b/pomelovsd/ExitMaze/Strategies/DFS.py new file mode 100644 index 0000000..9962e92 --- /dev/null +++ b/pomelovsd/ExitMaze/Strategies/DFS.py @@ -0,0 +1,23 @@ +from strat import PathFindingStrategy +from path import restore + + +class DFS(PathFindingStrategy): + def find_path(self, maze, start, exit): + stack = [start] + visited = {start} + parent = {} + + while start: + current = stack.pop() + + if current == exit: + break + + for n in maze.get_neighbors(current): + if n not in visited: + visited.add(n) + parent[n] = current + stack.append(n) + + return self.restore(parent, start, exit), len(visited) \ No newline at end of file diff --git a/pomelovsd/ExitMaze/Strategies/path.py b/pomelovsd/ExitMaze/Strategies/path.py new file mode 100644 index 0000000..edef25c --- /dev/null +++ b/pomelovsd/ExitMaze/Strategies/path.py @@ -0,0 +1,14 @@ +def restore(self, parent, start, exit): + if exit not in parent and start != exit: + return[] + + path = [] + current = exit + + while current != start: + path.append(current) + current = parent[current] + + path.append(start) + path.reverse() + return path \ No newline at end of file