import random def create_file(): n = random.randint(5, 10) maze = [] for _ in range(n): row = "".join(["M" if random.random() < 0.3 else " " for _ in range(n)]) maze.append(row) with open("maze.txt", "w") as f: for row in maze: f.write(row + "\n") return n def read_maze(): with open("maze.txt") as f: maze = [list(line.rstrip("\n")) for line in f] return maze def solve(maze, x, y, xc, yc, visited, length, best): n = len(maze) if x < 0 or y < 0 or x >= n or y >= n: return if maze[x][y] == "M" or visited[x][y]: return if length >= best[0]: return if x == xc and y == yc: best[0] = min(best[0], length) return visited[x][y] = True solve(maze, x + 1, y, xc, yc, visited, length + 1, best) solve(maze, x - 1, y, xc, yc, visited, length + 1, best) solve(maze, x, y + 1, xc, yc, visited, length + 1, best) solve(maze, x, y - 1, xc, yc, visited, length + 1, best) visited[x][y] = False while True: print("\n1 - создать лабиринт\n2 - решить\n0 - выход") try: c = input("Выбор: ") if c == "1": n = create_file() print("Файл создан. Размер:", n) elif c == "2": maze = read_maze() n = len(maze) x = int(input("Старт X: ")) y = int(input("Старт Y: ")) xc = int(input("Сыр X: ")) yc = int(input("Сыр Y: ")) visited = [[False] * n for _ in range(n)] best = [10**9] solve(maze, x, y, xc, yc, visited, 0, best) if best[0] == 10**9: print("Путь не найден") else: print("Кратчайший путь:", best[0]) elif c == "0": break except: print("Ошибка ввода")