# - * -コーディング:UTF- 8は - * - からコレクション#インポート両端キューキューに導入 迷路 = [ [ 1、1、1、1、1、1、1、1、1、1 ]、 [ 1、0、0、1、0、0、0、1、0、1 ]、 [ 1、0、 0、1、0、0、0、1、0、1 ]、 [ 1、0、0、0、0、1、1、0、0、1 ]、 [ 1、0、1、1、1、0、0、0、0、1 ]、 [ 1、0、0、0、1、0、0、0、0、1 ]、 [ 1、0、1、0、0、0、1、0、0、1 ]、 [ 1、0、1、1、1、0、1、1、0、1]、 [ 1、1、0、0、0、0、0、0、0、1 ]、 [ 1、1、1、1、1、1、1、1、1、1 ] ] #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を0:2 ])及び#xを取得するためにノードを追加し、yは座標情報 curNode =パス[curNode [ 2]ここで、[#1 curNode 2 ]前のステップは、現在のノードのノード識別である:パス添字をので、パス[curNode [ 2 ]前のノードを取得する realpath.appendを(curNodeを[ 0:2 ])# 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を(1、1、8は、図8)