Как правильно организовать данный алгоритм?
start - указываем с какой вершины начинать. В массиве visited ставим, что мы эту вершину прошли (true). Добавляем эту вершину в стек. Дальше цикл, пока стек не пустой, ищем вершины которые есть связанные с той, что в стеке, и не были еще посещены (false). Если такие находятся - отмечаем что, мы ее посетили и присваиваем шаг, на котором она была посещена (dfs) и помещаем ее в вершину стека. Потом должна выполняться проверка: если вершина, у которой все смежные были посещены, еще есть в стеке - удаляем ее.
void detour::DFS(int start)
{
int dfs = 0;
Stack stack;
visited[start] = true;
dfsnumber[start] = ++dfs;
stack.Push(start);
while(stack.first)
{
for(int i=0; i<size; i++)
{
if((graph[stack.first->data][i]) && !(visited[i]))
{
visited[i] = true;
dfsnumber[i] = ++dfs;
stack.Push(i);
}
}
stack.Pop();
}
}
Граф задается матрицей смежности. dfs - шаг, на котором вершина посещена.
У вас глобальная ошибка в логике.
while(stack.first){
for(int i=0; i<size; i++){
/*...*/
stack.Push(i);
}
stack.Pop();
}
Вы кладёте в стек сразу все смежные с данной вершиной. Так делать нельзя. Если вам сильно нужно написать нерекурсивный вариант рекурсивного алгоритма, то нужно хранить переменные i
(для каждого значения стека) в массиве.
Пример теста:
1->2
2->3
2->4
3->4
Ожидание - 1->2->3->4
ваш вывод (если докодить) 1->2->4->3
.
если вершина, у которой все смежные были посещены, еще есть в стеке - удаляем ее
Тут странная формулировка, наверное имелось ввиду в вершине стека. Если это исправить то код скорее всего будет рабочий.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Перестал работать getch()Компилирует без ошибок, а работать, как следует не хочет, не реагирует на нажатие клавиш
Перечитал весь гугл по мвс получаю с помощью методов класса данные, в формате [x,y;x,y;
Сжать массив, удалив из него все элементы, величина которых находится в интервале [a,b]Освободившийся в конце массива элементы заполнить нулями
С помощью каких библиотек можно представить изображение в виде матрицы чисел RGB