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