Я работаю над заданием, в котором справился с основной проблемой и изучаю упражнения по расширению.В настоящее время дана карта, и все возможные решения лабиринта указаны на сетке, которая напечатана следующим образом:
1 1 3 1 0 2
3 3 3 3 1 3
3 3 1 3 3 3
3 3 3 1 3 0
3 1 3 1 3 1
3 1 3 3 3 0
Где 0 - это пустое пространство, 1 - это стена, 2 - это стена.цель, а 3 посещаемое пространство.Задача расширения состоит в том, чтобы дать кратчайшее возможное решение лабиринту с любой заданной отправной точкой.Если отправной точкой является стена, то лабиринт не может быть решен.Это тоже хорошо.Это должно быть в состоянии работать для любого данного лабиринта.
Я действительно не знаю, с чего начать с этой проблемой.Одна идея состояла в том, чтобы взять сумму всех путей и найти самый маленький из них, но я не уверен, как реализовать это.
В настоящее время это мой код:
EMPTY = 0
WALL = 1
GOAL = 2
VISITED = 3
def solve(grid, x, y):
if grid[x][y] == GOAL:
show_grid(grid)
return True
elif grid[x][y] == WALL:
return False
elif grid[x][y] == VISITED:
return False
else:
# mark as visited
grid[x][y] = VISITED
# explore neighbors clockwise starting by going up
if ((x < len(grid)-1 and solve(grid, x + 1, y))
or (y > 0 and solve(grid, x, y-1))
or (x > 0 and solve(grid, x-1, y))
or (y < len(grid)-1 and solve(grid, x, y+1))):
return True
else:
return False
def show_grid (grid):
for i in range(len(grid), 0, -1):
# print("i: ", i)
for element in grid[i-1]:
print (element, end=" ")
print()
def main ():
grid = [[EMPTY, WALL, EMPTY, EMPTY, EMPTY, EMPTY],
[EMPTY, WALL, EMPTY, WALL, EMPTY, WALL],
[EMPTY, EMPTY, EMPTY, WALL, EMPTY, EMPTY],
[EMPTY, EMPTY, WALL, EMPTY, EMPTY, EMPTY],
[EMPTY, EMPTY, EMPTY, EMPTY, WALL, EMPTY],
[WALL, WALL, EMPTY, WALL, EMPTY, GOAL]]
solve(grid, 0, 0)
Расширение просит напечатать длину кратчайшего пути, где обход 1 квадрата равен 1 движению.Любая помощь с этой проблемой приветствуется.