diff --git a/raskatovia/docs/data/task2/solver.py b/raskatovia/docs/data/task2/solver.py index ae1b9f4..bad83a7 100644 --- a/raskatovia/docs/data/task2/solver.py +++ b/raskatovia/docs/data/task2/solver.py @@ -40,6 +40,33 @@ class BfsStrategy: "visited": visited_count, "length": len(path) } +class DfsStrategy: + def solve(self, maze): + start = maze.start + finish = maze.finish + stack = [start] + previous = {start: None} + visited_count = 0 + + while stack: + current = stack.pop() + visited_count += 1 + + if current == finish: + break + + for next_cell in maze.neighbors(current[0], current[1]): + if next_cell not in previous: + previous[next_cell] = current + stack.append(next_cell) + + path = build_path(previous, start, finish) + return { + "name": "DFS", + "path": path, + "visited": visited_count, + "length": len(path) + } class MazeSolver: def __init__(self, strategy): @@ -50,7 +77,7 @@ class MazeSolver: if __name__ == "__main__": maze = MazeBuilder().from_file("raskatovia/docs/data/task2/maps/simple.txt").build() - solver = MazeSolver(BfsStrategy()) + solver = MazeSolver(DfsStrategy()) result = solver.solve(maze) print("algorithm:", result["name"]) print("visited:", result["visited"])