В этом куске кода
else {
addBackCirListDeque(&stack, currentVertex->neighbors[i]);
if(currentVertex->neighbors[i]->isVisited == 0) {
addBackCirListDeque(&stack, currentVertex->neighbors[i]);
}
}
Вы по какой-то причине добавляете соседнюю вершину currentVertex->neighbors[i]
в стек DFS дважды . Почему ты делаешь это дважды ???
Более того, первое добавление выполняется даже без проверки, был ли сосед уже посещен. Зачем? Если вы делаете это таким образом (т.е. добавляете без проверки, посещали ли вы уже) в циклическом графе, алгоритм перейдет в бесконечный цикл. Он будет циклически повторять один и тот же цикл, никогда не достигая других частей графика.
P.S. Проверка if(currentVertex->isVisited == 0)
перед этим, вероятно, предотвратит бесконечный цикл, но повторное добавление, описанное выше, не имеет смысла для меня.
P.P.S. О, я думаю, что начинаю понимать. Он добавляется дважды преднамеренно: первое (безусловное) добавление для возврата назад, второе добавление (с проверкой) для продвижения вперед DFS. Хм ... Может даже работать, хотя я бы так не поступил. Вы уверены, что ваш ввод правильный? Связан ли граф, т.е. действительно ли вершина достижима?