Поиск графика в ширину
применяет поиск в ширину, чтобы изобразить в виде графика v
= bfsearch(G
,s
)G
запуск в узле s
. Результатом является вектор идентификаторов узла в порядке их открытия.
[___] = bfsearch(___,'Restart',
, где tf
)tf
true
, перезапускает поиск, если никакие новые узлы не достижимы от обнаруженных узлов. Можно использовать любую из комбинаций аргументов ввода или вывода в предыдущих синтаксисах. Эта опция гарантирует, что поиск в ширину достигает всех узлов и ребер в графике, даже если они не достижимы от стартового узла, s
.
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'
событие указывает на стартовый узел каждый раз поисковые перезапуски.