Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обход дерева. Посчитать размер веток  
:(
    Опции темы
Mark4545
Дата 28.10.2009, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 111
Регистрация: 6.11.2006

Репутация: нет
Всего: нет



Дано несколько элементов дерева имеющих структуру
Код

struct tree {
           char         name;             // имя узла дерева
           char         parentName; // Имя родителся
           int          level; // Уровень вложености
           struct tree *parent; //указатель на родителя
           int          nChilds; //кол-во детей
           struct tree *child[ 25 ]; //Указатели на детей.
           int size; //Виртуальный( вымышленый размер)
};
  
Допустим есть  дерево в скобочках указан виртуальный размер
Код

            A(10)
                |
 X(6)-----C(2)------------------------L(3)
   |           |
 Y(8)       D(5)----E(15)

Как определить ветвь с максимальным размером т.е в данном случаее это будет A-C-E ( 10 + 2 + 15 )  =27


Это сообщение отредактировал(а) Mark4545 - 28.10.2009, 21:12
PM MAIL   Вверх
Mark4545
Дата 29.10.2009, 00:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 111
Регистрация: 6.11.2006

Репутация: нет
Всего: нет



Вопрос решен
PM MAIL   Вверх
Anikmar
Дата 29.10.2009, 08:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата(Mark4545 @  29.10.2009,  00:57 Найти цитируемый пост)
Вопрос решен 

Правила форума:

Если вопрос решен - надо сказать как и закрыть тему
PM MAIL ICQ   Вверх
Mark4545
Дата 29.10.2009, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 111
Регистрация: 6.11.2006

Репутация: нет
Всего: нет



Код

struct vetka {
    char trace[ 255 ] ;
    int sum;
};

Код

vetka vetka1[ 255 ] = { 0 };
            tree *ptree = 0;
            int vetk = 0;
            int cVetk = 0;
            for ( int level = maxlevel ; level >=0 ; level--)
            {
                for ( int curElem = 0; curElem <= nElem ; curElem ++)
                {
                    if ( curTree[curElem].level == level )
                    {
                        if ( curTree[curElem].name != 0 )
                        {
                            if( curTree[curElem].used == false )
                            {
                                //printf("%d:%d\n",vetk,cVetk);
                                //getch();
                              vetka1[ vetk ].trace[cVetk] = curTree[curElem].name;
                              //printf("%c has %d level and size %d\n",curTree[curElem].name,level,curTree[curElem].size);
                              ptree = curTree[curElem].parent;
                              ptree->used = true;
                              vetka1[ vetk ].sum = vetka1[ vetk ].sum + curTree[curElem].size;
                             // printf("trace!:%s(%d)\n",vetka1[ vetk ].trace,vetka1[ vetk ].sum);
                             // getch();
                              while( ptree )
                              {
                                  cVetk++;
                                  vetka1[ vetk ].trace[cVetk] = ptree->name;
                                  vetka1[ vetk ].sum = vetka1[ vetk ].sum + ptree->size;
                                 // printf("trace:%s(%d)\n",vetka1[ vetk ].trace,vetka1[ vetk ].sum);
                                  if ( !(ptree->parent) )
                                  {
                                      vetk++;
                                      cVetk=0;
                                      break;
                                  }
                                  ptree = ptree->parent;
                                  ptree->used= true;
                              }
                            }
                        }
                    }
                }
            }
            printf("Total vetok:%d\n",vetk);

В структуру дерева добавлен элемент used. при обходе элемента ставиться в значение true
PM MAIL   Вверх
azesmcar
Дата 29.10.2009, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(Mark4545 @  29.10.2009,  13:36 Найти цитируемый пост)
В структуру дерева добавлен элемент used. при обходе элемента ставиться в значение true 

а почему не рекурсией? зачем так извращаться?
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0504 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.