Поиск по графику
применяет первичный поиск по ширине к график 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' |
Ребро соединяется с ранее обнаруженным узлом |
'edgetofinished' |
Ребро соединяется с конечным узлом |
Для получения дополнительной информации смотрите описание входного параметра для events
.
Примечание
В случаях, когда входной график содержит узлы, которые недоступны из стартового узла, 'Restart'
опция предоставляет способ сделать поиск посещающим каждый узел в графике. В этом случае 'startnode'
событие указывает начальный узел каждый раз, когда поиск перезапускается.