2015-01-30 3 views
1

У меня есть неориентированный граф, и из него я перерисовываю один и тот же граф, но в древовидной структуре (с уровнями). Я знаю, как работает алгоритм Breadth First Search (BFS), но я не уверен, как выполнить переход из графика -> tree.Как построить дерево BFS после запуска BFS на неориентированном графике?

Здесь, в this Wikipedia article, если вы прокрутите вниз немного, вы увидите две фотографии немецких городов. Даже после прочтения кода pseduo там я просто не понимаю, как вы получаете от первого снимка до второго.

ответ

0

Один стандартный способ получить дерево BFS из графика - запустить BFS и, как вы это делаете, сохранить таблицу, сопоставляющую каждый узел в графе с его родителем в дереве. Вы заполняете его следующим образом: исходный узел не имеет родителя (в конце концов, это корень). Затем, всякий раз, когда вы обрабатываете узел u и исследуете один из его неизведанных соседей v, вы устанавливаете родительский элемент v как u. Попробуйте проследить это на некоторых небольших примерах, и вы увидите, что это неявно создает дерево, за исключением того, что края идут назад (края указывают от детей до родителей, а не наоборот). Затем вы можете просто перевернуть ребра, чтобы вернуть дерево BFS.

Надеюсь, это поможет!

+0

спасибо. Слушание BFS объясняется тем, как вы это делаете, помогает много. Я думаю, мой учитель сказал, что в BFS часто есть разные ответы. В этой статье в Википедии, которую я связал в своем посте, дерево BFS, которое они предоставили, конечно, не является единственным ответом? (Я спрашиваю, потому что я получил немного другой ответ). – eltigre

+0

Я вижу два возможных дерева, которые отличаются только тем, где находится Аугсберг. – templatetypedef

+0

Клянусь, я провел час, пытаясь найти правильное объяснение превращения графа в дерево BFS и не смог найти его. Твой был единственным, что действительно имело смысл, даже Вики, на самом деле, не понимали, что касается родителей. И теперь я это понимаю. Спасибо вам! – eltigre

Смежные вопросы