Pythonの迷路

 

# - * -コーディング:UTF- 8は - * - からコレクション#インポート両端キューキューに導入
迷路 = [ 
    [ 1111111111 ]、
    [ 1001000101 ]、
    [ 10
 

 01000101 ]、
    [ 1000011001 ]、
    [ 1011100001 ]、
    [ 1000100001 ]、
    [ 1010001001 ]、
    [ 1011101101]、
    [ 1100000001 ]、
    [ 1111111111 ] 
 ] 
 
#4つの移動方向
DIRS = [ 
    ラムダX、Y:(Xの + 1 、Y)、#低い
    ラムダX、Y:(X - 1、Y)、#
    ラムダX、Y:(X、Y - 。1 )、#左
    ラムダX、Y:(X、Y +を1 )#右
] 
 
 
DEFますprint_r(パス):
    "" " 印刷パス" "" 
    curNode =パス[ - 1 ]#最後のノード
    のrealpath = の経路のうち[]#
     一方 curNode [ 2 ] = - !1:最後のノード#フラグがあるか否かを判断する- 。1、説明は出発点が-1である場合、 -なし場合。1検索を継続しない
        ([curNode realpath.appendを02 ])及び#xを取得するためにノードを追加し、yは座標情報
        curNode =パス[curNode [ 2]ここで、[#1 curNode 2 ]前のステップは、現在のノードのノード識別である:パス添字をので、パス[curNode [ 2 ]前のノードを取得する
 
    realpath.appendを(curNodeを[ 02 ])# curNodeは[ 2 ] == - 1 、迷路の出発点であり、座標情報は、パスに追加され
 
    、以前に生成されたリストは、前面から背面に前方になった後、realpath.reverse()#逆リスト
    プリント(実パス)
 
 
DEF maze_path_queueを( X1、Y1、X2、Y2) :#(X1、Y1)が出発点を表し、(x2、y2)が終わりに代わって
    。 "" " キューを持つ迷路の問題を達成-深さ優先探索を。" "" 
    キュー = デック()#キューの作成
    キューを((X1、Y1、.append - 。1位の開始点を添加し、第三のパラメータは、開始点に設定されている誰、それを記録する時間である)) - 。1 
    パス = []#がデキューノード保存
     しばらくLEN(キュー)> 0 :#だけ循環された空でないチーム
        curNode = 最初のチームのチームのうち、queue.pop()#ノードを、現在のノードの変数の共存
        path.appendは(curNode)#は、パスのリストに追加する
        IF curNode [ 0 ] X2とcurNode == [ 1。 ==] Y2:#は、エンドに行くか否かを判断
            終了、印刷パス到達した場合しますprint_r(パス)#
            復帰
 
        のためのディレクトリ#4探索方向:DIRSを
            NEXTNODEが curNode [(DIRを= 0 ]、curNode [ 1 ])#1 curNode [ 0 ]、curNode [ 1 ]は、それぞれ現在のノードXであり、Y
             IF迷路[NEXTNODE [ 0 ] [NEXTNODE [ 1]] == 0 :#ウェイ道路場合
                queue.append((NEXTNODE [ 0 ]、NEXTNODE [ 1 ]、LEN(パス) - 1 ))タグにそれを聞かせてチームに#の後続ノード、:パスの最終インデックス要素
                迷路[NEXTNODE [ 0 ] [NEXTNODE [ 1。 =] 2    #が2に設定され、標識が通過した
 
    :キューが空である#場合(デッドエンドの現在のノードは、ノードが新しいノードが追加されていない削除) 、決してありません
        印刷(なしパスを返す
 
 
maze_path_queueを(118は図8

 

おすすめ

転載: www.cnblogs.com/sea-stream/p/11100396.html