アルゴリズム図(4)

1.幅優先検索(最短経路を検索)

友達の家への最短ルート?チェスで最少のステップ数を獲得しますか?ネットワークで最も近い写真家ですか?

 ツインピークスからゴールデンゲートブリッジまでの最後の3つのステップ。

第二に、グラフの概念:ノードとエッジ

3.パスはありますか?どの経路が最短ですか?

ネットワーク:

                   

幅優先探索の実行では、探索範囲は開始点から徐々に外側に広がります。つまり、最初に1次の関係がチェックされ、次に2次の関係がチェックされます。そして順番にキューに追加されます。

つまり、最初のレベルの関係は最初にキューに入れられ、2番目のレベルの関係は後でキューに入れられますが、同じレベルの順序は自由に調整できます。ただし、重複は避けてください。

4、アルゴリズムの実装

1.チェックする人(レベル1)を格納するキューを作成します。

2.キューから人をポップし、条件を満たしているかどうかを確認します。

3.会う、あなたは終わった、そしてやめる;

4.そうでない場合は、この人物のすべての隣人をキューに追加します(第2レベル)。

5.手順2に戻ります。

6.キューが空の場合、ネットワークには資格のある人はいません。

 コレクションから1 インポートdeque
 2  
3グラフ= {}                            
 4グラフ[ " あなた" ] = [ " アリス"" ボブ"" クレア" ]
 5グラフ[ " アリス" ] = [ " ペギー" ]
 6グラフ[ " ボブ" ] = [ " anuj " " ペギー]
7グラフ[ " クレア" ] = [ " トム"" ジョニー" ]
 8グラフ[ " anuj " ] = []
 9グラフ[ " ペギー" ] = []
 10グラフ[ " トム" ] = []
 11グラフ[ " jonny " ] = []
 12  
13  def search(name):
14      search_queue =デック()                    キューを作成します。
15      search_queueグラフ+ = [名前]                あなたの隣人の検索・キューに追加
16      = []で検索                              被検査者を記録するための
 17。     
18で     しばらく search_queue:                       長い行列が空でない限り
。19          人= search_queue.popleft()       は、最初にしてください人
20          のiF  ない検索:             チェックするとき、これは検査されていない場合にのみ、
 21              のiF:person_is_seller(人物)       #1 の要件にチェック準拠
22                  印刷(人は、マンゴー売主があります!23                  リターン真の
 24              25                  search_queue + =グラフ[人]   要件を満たしていない、これらの個々の友人が検索キュー参加する
26                  searched.append(人)
 27      リターン28  
29  DEF person_is_seller(名):
 30      リターン名を[ - 。1] == M                      #の条件、それはメートルの名前の最後の文字であれば
31がある 
32件の検索(あなた
トムマンゴーの売り手です!

Out [ 5 ]:
True

 判定されたものは記録し、次回はチェックしないでください。そうしないと、無限ループに陥ります。

 

幅優先探索の実行時間はO(頂点の数+エッジの数)= O(V + E)

注:

1.検索リストの参加者を参加順にチェックする必要があります。そうでない場合、見つかったものは最短パスではないため、検索リストはキューである必要があります。

2.チェックした人は、もう一度チェックしないでください。チェックしないと、無限ループが発生する可能性があります。

おすすめ

転載: www.cnblogs.com/direwolf22/p/12681896.html