Кратчайший путь через лабиринт, игнорируя одну стену

Так что я беру вызов foo.bar и должен подготовить побег зайчиков. Всякий раз, когда я запускаю тестовый пример для своего кода, он работает, но все равно говорит, что при отправке произошел сбой.

Задача состоит в том, чтобы получить кратчайший путь через матричный лабиринт mxn, где 2

Мое решение состоит в том, чтобы найти все возможные пути к финишу с самого начала, подсчитав, сколько стен пересекается по пути. Если число стенок равно 1 или меньше, решение является действительным, и его длина записывается.

path_dict = {}
min_solution = None

def answer(maze):
    path = None
    traverse (maze, path, 0, 0)
    global min_solution
    return min_solution

def traverse (maze, path, x, y):
    global path_dict
    global min_solution 

    cell_str = '(%d,%d)' % (x, y)

    x_max = len (maze) - 1
    y_max = len (maze[0]) - 1

    # check x and y are valid
    if x < 0 or x > x_max:
        return 
    if y < 0 or y > y_max:
        return 

    # Check not already visited cell
    if path and cell_str in path:
        return 

    total = None
    if path:
        total = path_dict [path]

    f_cell = '(%d,%d)' % (x_max, y_max)

    if path and f_cell in path:
        return

    # Check if final cell
    if x == x_max and y == y_max:
        if not path [-5:] == f_cell:
            path += f_cell
            path_dict [path] = total
        solution_len = len (path.split (')('))
        if not min_solution:
            min_solution = solution_len
        elif solution_len < min_solution:
            min_solution = solution_len
        #maze [x][y] = 2 
        return 

    #if path and path [-5:] == f_cell:
    #   return 
    # Not final cell - get value, add to count

    # Add path string to mem
    if path:
        path += cell_str
        cell_val = maze [x][y]
        total += cell_val
        # too many walls hit, stop checking this path
        if total >= 2:
            return 
    else:
        path = cell_str
        total = 0

    path_dict [path] = total

    if min_solution and len (path.split (')(')) > min_solution:
        return

    # Move DOWN, RIGHT, UP, LEFT
    traverse (maze, path, x + 1, y)
    traverse (maze, path, x, y + 1)
    traverse (maze, path, x - 1, y)
    traverse (maze, path, x, y - 1)

    return

0 ответов

Другие вопросы по тегам