#python #recursion #maze
#питон #рекурсия #Лабиринт
Вопрос:
Привет я надеюсь, что кто-нибудь сможет помочь мне с этим кодом, самый сложный код, который я написал, мне нужно использовать рекурсию для решения лабиринта, каждое значение должно быть выше, чем предыдущее. Вот примеры : примеры
idk почему, но есть проблема с печатью ответов на 5 вопросов и ответов
def solve_maze_monotonic_helper(maze,index_x,index_y,last_value,lastvalue_list,final): if index_y == -1 or index_y ==len(maze) or index_x == -1 or index_x == len(maze[0]): return False if last_value lt; maze[index_y][index_x]: final.append(lastvalue_list) if last_value gt;= maze[index_y][index_x] and (index_x !=0 or index_y !=0): return False if (index_y == len(maze)-1) and (index_x == len(maze[0])-1): final.append([index_y,index_x]) return final difference_y = index_y - lastvalue_list[0] difference_x = index_x - lastvalue_list[1] last_value =maze[index_y][index_x] lastvalue_list = [index_y,index_x] right,down,left,up =True,True,True,True right = solve_maze_monotonic_helper(maze,index_x 1,index_y,last_value,lastvalue_list,final) if right == False: down = solve_maze_monotonic_helper(maze,index_x,index_y 1,last_value,lastvalue_list,final) if down == False: left = solve_maze_monotonic_helper(maze,index_x-1,index_y,last_value,lastvalue_list,final) if left == False: up = solve_maze_monotonic_helper(maze,index_x,index_y-1,last_value,lastvalue_list,final) if up == False: final.pop(len(final)-1) return False return final
печать(solve_maze_monotonic_helper([[1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6], [4, 5, 6, 6]],0,0,1,[0,0],[]))
Ответ №1:
if last_value gt;= maze[index_y][index_x] and (index_x !=0 or index_y !=0): return False
Эта строка может создать бесконечный цикл, если вы не можете найти путь с правой-gt;правой или правой-gt;gt;вниз, следующий шаг-вправо — gt;gt;gt;влево, обратно к (0,0), который никогда не будет считаться недействительным, в результате чего цикл будет просто повторяться, все глубже и глубже погружаясь в рекурсивные вызовы, пока вы не достигнете предела.
if last_value gt;= maze[index_y][index_x]
должно быть достаточно, если вы исправите остальную часть функции
установите last_value
для начала отрицательное число, если вы не хотите, чтобы оно было истинным на первой итерации.