Files
labs/labPython/lab20/task_1.py
2026-04-18 14:42:00 +05:00

66 lines
1.9 KiB
Python

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("Ошибка ввода")