python迷宮問題の深さは優先的に実例を巡回します。


一、迷宮の紹介
ラビリンス問題をpythonで解くと、ラビリンスは二次元リストであり、今回はラビリンス問題を深さ優先で解く。出発点と終点を定義して、一つの位置から次の位置までは、上または下または左または右に行くことでしか実現できません。出発点から出発して、どうやって終点までの通路を見つけられますか?
二、深さ優先巡回
簡単であれば、私達のケースでは、適当に道を選んで、まっすぐ行って、歩けなくなりました。また後で新しい道を選びます。

# 1   ,0   
maze = [
    [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
    [1, 0, 1, 1, 0, 0, 0, 1, 1, 1],
    [1, 0, 1, 1, 1, 1, 0, 0, 1, 1],
    [1, 0, 1, 0, 0, 0, 0, 0, 1, 1],
    [1, 0, 1, 0, 1, 1, 1, 1, 1, 1],
    [1, 0, 0, 0, 1, 1, 1, 1, 1, 1],
    [1, 1, 1, 0, 0, 0, 0, 1, 1, 1],
    [1, 1, 1, 0, 0, 1, 0, 1, 1, 1],
    [1, 1, 1, 1, 1, 1, 0, 0, 0, 1],
    [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
]
まず出発点と終点を設定します。

start = (1, 1)
end = (8, 8)
今のこの点を判断して、0は道を歩くことができて、1は壁のために歩くことができません。
一つの点の次の点の座る基準について説明します。
  • 上走:r-1、c
  • 下へ行きます。r+1、c
  • 左走:r,c-1
  • 右行き:r,c+1
  • 私達のこの迷宮のある一点は歩けないところに達しました。つまり袋小路です。元の道に戻らなければなりません。
    この時、私達は一つの概念があります。つまり、スタックの思想は先進的な後出です。
    どのように理解していますか?小さな例を挙げると、食堂のおばさんです。毎朝肉まんを蒸しています。
    最後に置いて、学生が肉まんを食べに来ます。彼女は上から取ります。一番上は最後に置いたものです。一番下は一番先に置いたものです。だから、先に出したものと言います。
    リストを空にして、このリストで直接appedを使います。
    popで取り出したら、appndの最後の要素を取ります。
    
    #     ,               ,[r, c]
    #          ,   start
    list01 = [start]
    
    歩いた道は2と定義されています。
    
    row, col = now
    # python          now      ,   ,   
    maze[row][col] = 2
    #           , 2,             ,          ,                   
    
    コアコード:
    
    if maze[row - 1][col] == 0:
        #      
        list01.append((row - 1, col))
        continue
    elif maze[row][col + 1] == 0:
        #      
        list01.append((row, col + 1))
        continue
    elif maze[row + 1][col] == 0:
        #      
        list01.append((row + 1, col))
        continue
    elif maze[row][col - 1] == 0:
        #      
        list01.append((row, col - 1))
        continue
    
    最終コードは、実行してみてもいいです。
    
    maze = [
        [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
        [1, 0, 1, 1, 0, 0, 0, 1, 1, 1],
        [1, 0, 1, 1, 1, 1, 0, 0, 1, 1],
        [1, 0, 1, 0, 0, 0, 0, 0, 1, 1],
        [1, 0, 1, 0, 1, 1, 1, 1, 1, 1],
        [1, 0, 0, 0, 1, 1, 1, 1, 1, 1],
        [1, 1, 1, 0, 0, 0, 0, 1, 1, 1],
        [1, 1, 1, 0, 0, 1, 0, 1, 1, 1],
        [1, 1, 1, 1, 1, 1, 0, 0, 0, 1],
        [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
    ]
    
    start = (1, 1)
    end = (8, 8)
    
    #     ,               ,[r, c]
    #          ,   start
    list01 = [start]
    
    #     ,   
    #                 ,            
    while list01:
        #              ,         ,    ,              -1
        now = list01[-1]
        if now == end:  #      now           end
            print(list01)
            print("   ")
            break
        row, col = now
        # python          now      ,   ,   
        maze[row][col] = 2
        #           , 2,             ,          ,                   
    
    	# continue       ,        
        if maze[row - 1][col] == 0:
            #      
            list01.append((row - 1, col))
            continue
        elif maze[row][col + 1] == 0:
            #      
            list01.append((row, col + 1))
            continue
        elif maze[row + 1][col] == 0:
            #      
            list01.append((row + 1, col))
            continue
        elif maze[row][col - 1] == 0:
            #      
            list01.append((row, col - 1))
            continue
        else: #     ,         ,      
            list01.pop()
    
    else:
        print("       ")
    
    
    締め括りをつける
    ここでは、python迷宮問題について、深度優先の文章を紹介します。これに関連して、python迷宮の深度優先内容は以前の文章を検索してください。または次の関連記事を引き続きご覧ください。これからもよろしくお願いします。