Почему мой l oop останавливается без вывода или сообщения об ошибке? - PullRequest
0 голосов
/ 24 апреля 2020

Меня попросили построить функцию, которая принимает массив 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...