最小番号の場所を見つけます

设定路径列表パス
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)

ステップバイステップ外、コール自体の後、ルート変数は、最初に空に設定されていません



おすすめ

転載: www.cnblogs.com/pingzideping/p/10936120.html