2016-10-23 7 views
1

У меня возникла проблема с реализацией (не кодом) DFS, включающей алгоритм двухкомпонентных алгоритмов, чтобы найти точки сочленения на графике, алгоритм был представлен в моей лекции по информатике, и я не сделал не поймите реализацию. (Просто уточнить, я знаю, как реализовать DFS). Позвольте мне объяснить: нам дается график, и нам нужно выполнить DFS, чтобы найти все точки сочленения, используя обратные номера и номер DFS. Моя главная проблема - найти обратный номер каждого узла, используя данный алгоритм.Поиск точек сочленения с использованием DFS и алгоритма бикомпонентов

Мы получили учебное пособие как упражнение для реализации алгоритма, я это сделал, но я понятия не имею, правильно ли оно. Может кто-то, пожалуйста, проверьте, что я сделал это правильно и, если возможно, исправлю меня. Задача состоит в следующем:

Использовать алгоритм, выполненный в классе, для создания дерева поиска по глубине . Для каждой вершины найти:

• ДФС-номера

• заднее числа

• является ли точкой сочленения enter image description here Алгоритм и мое решение: enter image description here Спасибо. Надеюсь, кто-то может помочь

+0

Почему вы думаете, что J должен быть точкой артикуляции? Это не одно. B также не является точкой сочленения. – kraskevich

+0

Поскольку в соответствии с условием точки сочленения 15> 14, таким образом, это точка сочленения, однако я знаю, что это неверно, потому что, если мы удалим J, он не отключит график – amine

+0

У вас есть dfs-time = 14 и back- число = 12. Это не точка артикуляции в соответствии с вашим алгоритмом, и это не точка артикуляции. – kraskevich

ответ

0

Вы используете алгоритм почти правильно. Единственный случай, который обрабатывается неправильно, - это корень: корень - точка артикуляции тогда и только тогда, когда в дереве dfs есть два или более дочерних элемента.

+0

Спасибо, что касается корня в этом случае, это артикуляция, так как у нее есть двое детей, так почему же она обрабатывается ненадлежащим образом? – amine

+0

@amine Два ребенка в дереве dfs, а не исходный граф. Если есть только один ребенок (это относится к графику из вашего вопроса), это не точка артикуляции, хотя Back (w)> = dfs-time (root) для любого дочернего элемента. – kraskevich