前
#设定路径列表パス DEF find_path2(ハイト、X、Y、のwater_level = 557、パス= []): #グローバルパス #设定坐标右0左1上2下3 right_point =ハイト[X] [Y + 1 ] left_point =ハイト[X] [Y-1 ] above_point =ハイト[X-1 ] [Y] below_point =ハイト[X + 1 ] [Y] #1 ジップ[*] go_path = [right_point、left_point、above_point、below_point] go_path1 = [ ' 右'、' 左'、' 上記'、' 以下' ] #のサークルログ 印刷(" 現在のポイント値:%D最小度:%sの最小の:%D " %(ハイト[X] [Y]、go_path1 [go_path.index(MIN( go_path))]、 go_path [go_path.index(MIN(go_path))])) IF分(go_path)> のwater_level: IF分(go_path)<= ハイト[X] [Y]: IF go_path.index(MIN(go_path ))== 0: #正しい 。path.append((X、Y + 1 )) find_path2(ハイト、X、Y + +1、のwater_level = のwater_level) IFgo_path.index(MIN(go_path))== 1: #左 path.append((X、Y-1 )) find_path2(ハイト、X、Y -1、のwater_level = のwater_level) 場合 go_path.index(MIN(go_path) )== 2: #上記 path.append((X-1 、Y)) find_path2(ハイト、X -1、Y、のwater_level = のwater_level) 場合 go_path.index(MIN(go_path))== 3: #以下 のパス.append((X + 1 、Y)) find_path2(ハイト、X 1、Y、のwater_level = のwater_level) リターンパス リターンパス DEF太陽(ハイト、X、Y、のwater_level = 0): 方法 = [] way.clear() way.append(find_path2(ハイト、X、Y、のwater_level = のwater_level)) 戻りウェイ find_path2(試験、0 、0、のwater_level = 0) 太陽(試験、 1,0、のwater_level = 0) 試験 =((10,10,10,10 ) 、( 10,9,8,10 ) 、( 10,10,3,10 ) 、( 10,10,10,10 ) )
問題は、ということです
find_path2パスは、コンテンツのローカル変数を解放しない、自分自身を再帰的に呼び出す
後
DEF find_path3(ハイト、X、Y、go_path): #グローバルパス #设定坐标右0左1上2下3 right_point =ハイト[X] [Y + 1 ] left_point =ハイト[X] [Y-1 ] above_point =ハイト[X-1 ] [Y] below_point =ハイト[X + 1 ] [Y] #1 ジップ[*] go_path = [right_point、left_point、above_point、below_point] go_path1 = [ ' 右'、' 左'、' 上記' ' 以下" ] #円ログ 印刷(" 现在点的值为:%D最小值为索引:%S最小值为:%D " %(ハイト[X] [Y]、go_path1 [go_path.index(MIN(go_path))]、 go_path [go_path.index(MIN(go_path))])) であれば分(go_path)> のwater_level: もし分(go_path)<= ハイト[X] [Y]: もし go_path.index(MIN(go_path))== 0 :#右 リターン(X、Y + 1 ) #1 path.append((X、Y + 1)) #1 find_path2(ハイト、X、Y + 1、のwater_level =のwater_level) 場合 go_path.index(MIN(go_path))= = 1: #左 復帰(X、Y-1 ) #1 path.append((X、Y-1)) #1 find_path2(ハイト、X、Y-1、のwater_level =のwater_level) 場合 go_path.index(MIN(go_path))== 2: #上記 リターン(X-1 、Y) #1 path.append((X-1、Y)) #1 find_path2(ハイト、X-1、Y、のwater_level =のwater_level) 場合 go_path.index(MIN(go_path))== 3 :#以下 リターン(X + 1 、Y) #1 path.append((X + 1、Y)) #1 find_path2(ハイト、X + 1、Y、のwater_level =のwater_level) 戻りなし 印刷("現在の数のwater_level次いで少ない」) DEF経路(ハイト、X、Y、のwater_level = 0) ルート = [] next_step = find_path3(ハイト、X、Y、go_path) 一方next_step: route.append(next_step) X 、Y = next_step next_step = find_path3(ハイト、X、Y、go_path) リターン経路 テスト =((10,10,10,10 ) 、( 10,9,8,10 ) 、( 10,10,3,10 ) ( 10,10,10,10 ) ) find_path3(試験、0,0、のwater_level = 1 ) 経路(試験、0,0、のwater_level = 0)
ステップバイステップ外、コール自体の後、ルート変数は、最初に空に設定されていません