From 308ee2d7166f8dffae01102c437374aa1f02b128 Mon Sep 17 00:00:00 2001 From: raskatovia Date: Fri, 22 May 2026 21:26:10 +0300 Subject: [PATCH] =?UTF-8?q?[2]=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BF=D0=BE=D0=B8=D1=81=D0=BA=20=D0=B2=20=D1=88=D0=B8?= =?UTF-8?q?=D1=80=D0=B8=D0=BD=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- raskatovia/docs/data/task2/solver.py | 58 ++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/raskatovia/docs/data/task2/solver.py b/raskatovia/docs/data/task2/solver.py index e69de29..ae1b9f4 100644 --- a/raskatovia/docs/data/task2/solver.py +++ b/raskatovia/docs/data/task2/solver.py @@ -0,0 +1,58 @@ +from collections import deque +from maze import MazeBuilder + +def build_path(previous, start, finish): + if finish not in previous: + return [] + path = [] + current = finish + while current != start: + path.append(current) + current = previous[current] + path.append(start) + path.reverse() + return path + +class BfsStrategy: + def solve(self, maze): + start = maze.start + finish = maze.finish + queue = deque([start]) + previous = {start: None} + visited_count = 0 + + while queue: + current = queue.popleft() + 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 + queue.append(next_cell) + + path = build_path(previous, start, finish) + return { + "name": "BFS", + "path": path, + "visited": visited_count, + "length": len(path) + } + +class MazeSolver: + def __init__(self, strategy): + self.strategy = strategy + + def solve(self, maze): + return self.strategy.solve(maze) + +if __name__ == "__main__": + maze = MazeBuilder().from_file("raskatovia/docs/data/task2/maps/simple.txt").build() + solver = MazeSolver(BfsStrategy()) + result = solver.solve(maze) + print("algorithm:", result["name"]) + print("visited:", result["visited"]) + print("length:", result["length"]) + print(maze.draw(result["path"])) \ No newline at end of file