Форум программистов, компьютерный форум, киберфорум
Наши страницы

Рекурсию в цикл - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как запихнуть в очередь указатель на узел дерева? http://www.cyberforum.ru/cpp-beginners/thread785049.html
как запихнуть в очередь указатель на узел дерева Добавлено через 16 минут up? Добавлено через 4 минуты как создать из узлов двоичного дерева очередь??
C++ Запись в файл, лишняя строка, не могу понять! Сломал всю голову, по каким то причинам при вводе данных клавиатуры, они записываются, но 1ая строка пустая, есть подозрение, ЧТО связано с "\n " в первом цикле. Не могу исправить, т.к. потом... http://www.cyberforum.ru/cpp-beginners/thread785047.html
ортогональная структура инвентарной ведомости C++
привет всем! вот пытаюcь решить задачу на тему односвязные списки из книги Абстракция данных и решение задач на C++. Стены и зеркала . и там нужно представить списки в таком виде ... так же вод...
Двумерный массив! Вычислить сумму элементов матрицы С лежащих на побочной(обратной) диагонали C++
Ввести два одномерных массива А и B. Вычислить массив C: Cij= Ai + Bj. Вычислить сумму элементов матрицы С лежащих на побочной(обратной) диагонали. Результат вывести на экран. Помоги написать...
C++ Среднее арифметическое обыкновенных дробей http://www.cyberforum.ru/cpp-beginners/thread785037.html
Всем добрый вечер! В программировании еще нуб можно сказать. Читаю "ООП в С++" Р. Лафоре(первая книга, до этого только бейсик в школе), и все бы ничего, но одно упражнение весь вечер не дает покоя.. ...
C++ Программа со сверхбольшими числами не выполняется до конца Сам код #include "verylong.h" void verylong::putvl()const { char temp ; strcpy(temp,vlstr); cout<<strrev(temp); } подробнее

Показать сообщение отдельно
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
13.02.2013, 13:06
Судя по всему, это обход в глубину графа, представленного в виде списков смежности.
Набросал на коленке такое:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
void f1 (int num)
{
   arr [num] = 0;
    
   for (unsigned i = 0; i < data [ num ].size(); i++)
   {
       const int next_vertex = data[num][i] - 1;
       
       if (arr [next_vertex])
       {
          arr [next_vertex] = 0;
          f1 (next_vertex);
       }
   }
}
 
void f2(int num)
{
   std::stack< std::pair<unsigned, unsigned> > stack;
   //pair.first - vertex number, pair.second - edge number
   
   stack.push( std::make_pair(num, 0) );
   
   arr[num] = 0;
   
   while (!stack.empty())
   {
      unsigned   vertex = stack.top().first;
      unsigned position = stack.top().second;
      stack.pop();
      
      if (position != data[num].size() - 1u)
      {
         stack.push( std::make_pair(vertex, position + 1) ); //next iteration
      }
      
      const unsigned next_vertex = data[num][position] - 1;
      
      if (arr[next_vertex])
      {
         arr[next_vertex] = 0;
         stack.push( std::make_pair(next_vertex, 0) );
      }
   }
}
Не факт, что код работает(я его вообще не тестировал), но общая идея должна быть понятна.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru