Поиск графов по ширине
применяет поиск по ширине к графу v = bfsearch(G,s)G начиная с узла s. Результатом является вектор идентификаторов узлов в порядке их обнаружения.
[___] = bfsearch(___,'Restart',, где tf)tf является true, перезапускает поиск, если из обнаруженных узлов нет доступных новых узлов. В предыдущих синтаксисах можно использовать любую комбинацию входных или выходных аргументов. Эта опция гарантирует, что поиск по ширине достигает всех узлов и рёбер графа, даже если они не доступны из начального узла. s.
dfsearch и bfsearch относиться к неориентированным графам так же, как к направленным графам. Неориентированное ребро между узлами s и t обрабатывается как два направленных края, один из s кому t и один из t кому s.
Алгоритм поиска Breadth-First начинается с начального узла, 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' |
Edge подключается к ранее обнаруженному узлу |
'edgetofinished' |
Кромка подключается к готовому узлу |
Дополнительные сведения см. в описании входного аргумента для events.
Примечание
В случаях, когда входной граф содержит узлы, которые недоступны из начального узла, 'Restart' предоставляет способ сделать поиск посещаемым каждым узлом в графике. В этом случае 'startnode' событие указывает начальный узел при каждом перезапуске поиска.