Кратчайший путь через лабиринт, игнорируя одну стену
Так что я беру вызов 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