Меня попросили построить функцию, которая принимает массив NumPy формы 151 × 151 в качестве входного аргумента. Массив загружается из файла «maze_data.npy», который содержит 50 лабиринтов размером 151 × 151, представляющим лабиринт. Изучите данные лабиринта, чтобы найти путь от точки входа [1,0] к точке выхода [149,150]. Заполните путь со значением 1 и возвращаем его обратно.
Я запускаю следующий код, однако оказывается, что мышь останавливается в лабиринте и нет ни вывода, ни сообщения об ошибке. Как я могу это исправить?
import numpy as np
import matplotlib.pyplot as plt
def solve_maze(maze):
ret = maze.copy()
### START YOUR CODE HERE ###
import sys
sys.setrecursionlimit(20000)
class vector2D:
def __init__(self,i,j):
self.i = i
self.j = j
def __eq__(self,other):
return self.i == other.i and self.j == other.j
def __repr__(self):
return '({},{})'.format(self.i,self.j)
def left(self):
left = vector2D(self.i,self.j-1)
return left
def right(self):
right = vector2D(self.i,self.j+1)
return right
def up(self):
up = vector2D(self.i-1,self.j)
return up
def down(self):
down = vector2D(self.i+1,self.j)
return down
class mouse:
@staticmethod
def Go(maze,start,end):
stack=[]
mouse.Visit(maze,start,end,stack)
return stack
@staticmethod
def Visit(maze,pt,end,stack):
if mouse.Is_Visitible(maze,pt,end,stack):
#maze[pt.i,pt.j] = 3
stack.append(pt)
#ax.imshow(maze,cmap='Blues')
if len(stack)%80 == 0:
plt.pause(0.1)
if not mouse.Is_end(stack,end) and \
not mouse.Have_way_out(maze,pt,end,stack):
stack.pop()
return mouse.Is_end(stack,end)
@staticmethod
def Is_Visitible(maze,pt,end,stack):
#print(pt)
return maze[pt.i,pt.j]==0 \
and pt not in stack
@staticmethod
def Have_way_out(maze,pt,end,stack):
return mouse.Visit(maze,pt.right(),end,stack) or \
mouse.Visit(maze,pt.left(),end,stack) or \
mouse.Visit(maze,pt.up(),end,stack) or\
mouse.Visit(maze,pt.down(),end,stack)
@staticmethod
def Is_end(stack,end):
return end in stack
start = vector2D(1,0)
end = vector2D(149,150)
for pt in mouse.Go(ret,start,end):
ret[pt.i,pt.j] = 1
if ret[end.i,end.j] == 0:
print('no way out')
#### END YOUR CODE HERE ####
return ret
if __name__ == '__main__':
data = np.load('maze_data.npy')
idx = np.random.randint(50)
# fig = plt.figure(figsize=(6,6), dpi=80)
# ax = fig.add_subplot(1,1,1)
# ax.imshow(data[idx],cmap='Blues')
# plt.ion()
ret = solve_maze(data[idx])
fig = plt.figure(figsize=(6,6), dpi=80)
plt.imshow(ret,cmap='Blues')
plt.show()