bfsearch
グラフの幅優先検索
構文
説明
例
入力引数
出力引数
ヒント
dfsearch
およびbfsearch
は有向グラフと無向グラフを同様に扱います。ノードs
とノードt
の間の無向エッジは、s
からt
へと、t
からs
への双方向エッジと同様に扱われます。
アルゴリズム
幅優先検索アルゴリズムは開始ノード s
から開始し、ノード インデックスの順序でその隣接ノードをすべて検査します。次に、それらの隣接ノードのそれぞれについて、順番に未訪問の隣接ノードを訪問します。開始ノードから到達可能なすべてのノードが訪問されるまで、アルゴリズムが継続します。
このアルゴリズムは、疑似コードで次のように記述できます。
Event startnode(S) Event discovernode(S) NodeList = {S} WHILE NodeList is not empty C = NodeList{1} Remove first element from NodeList FOR edge E from outgoing edges of node C, connecting to node N Event edgetonew(C,E), edgetodiscovered(C,E) or edgetofinished(C,E) (depending on the state of node N) IF event was edgetonew Event discovernode(N) Append N to the end of NodeList END END Event finishnode(C) END
bfsearch
は、新しいノードが検出された時点、あるノードから出るすべてのエッジが訪問された時点など、アルゴリズム内での異なるイベントを表すフラグを返すことができます。イベントのフラグを次の表に示します。
イベントのフラグ | イベントの説明 |
---|---|
'discovernode' | 新しいノードが検出されました。 |
'finishnode' | ノードから出るすべてのエッジが訪問されました。 |
'startnode' | このフラグは検索の開始ノードを示します。 |
'edgetonew' | エッジは未検出のノードに連結しています。 |
'edgetodiscovered' | エッジは以前検出したノードに連結しています。 |
'edgetofinished' | エッジは終了ノードに連結しています。 |
詳細は、events
の入力引数の説明を参照してください。
メモ
開始ノードから到達できないノードが入力グラフに含まれている場合、'Restart'
オプションにより検索でグラフ内の各ノードを訪問できます。この場合、'startnode'
イベントは検索が再開されるたびに開始ノードを示します。
バージョン履歴
R2015b で導入