Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > эн-мерное дерево


Автор: toxx 26.3.2010, 21:49
Заполняю эн-мерное дерево
Код


struct Tree
{
    int d;
    int size; // количество ветвей
    vector<Tree *> Trees;// массив указателей на сыновей
    void AddTree(Tree* node)//добавление новой вершины
    {
        Trees.push_back(node);
    }
};

Tree* first(int );
Tree* insNODE(Tree* ,int );
int main()
{
    Tree* root=first(10);
    insNODE(root,21);
    insNODE(root,22);
    insNODE(root,31);
    insNODE(root,32);
    insNODE(root,41);
    insNODE(root,42);
    insNODE(root,43);
    return 0;
}
Tree* first(int d)
{
    Tree *pv=new Tree;
    pv->d=d;
    pv->size=rand()/10000+1;
    return pv;
}
Tree* insNODE(Tree* root,int d)
{
    Tree *pv=root;
    Tree *node=new Tree;
    if(root->Trees.size()==3) 
    {
        insNODE(pv->Trees[root->Trees.size()-2],d);
        return pv;
    }
    else
    {
        pv->AddTree(node);
        node->d=d;
        node->size=rand()/10000+1;
        pv->Trees[pv->Trees.size()-1]=node;
    }
    return pv;
}




Никак не могу понять, как сделать так чтобы когда все вершины в дереве заполнены( т.е. pv->size==pv->Trees.size() )
переходил к заполнению следующей , мб чтото намудрил помогите разобраться.Спасибо 

Извините, я наверно плохо объяснил что у меня не получается.
Я заполняю эн-мерное дерево
Код


Tree* first(int d)
{
    Tree *pv=new Tree;
    pv->d=d;
    pv->size=rand()/10000+1;
    return pv;
}
Tree* insNODE(Tree* root,int d)
{
    Tree *pv=root;
    Tree *node=new Tree;
    if(root->Trees.size()==3) 
    {
        insNODE(pv->Trees[root->Trees.size()-2],d);
        return pv;
    }
    else
    {
        pv->AddTree(node);
        node->d=d;
        node->size=rand()/10000+1;
        pv->Trees[pv->Trees.size()-1]=node;
    }
    return pv;
}




pv->size это количество ветвей(задаётся случайно) которое которое должно выходить из вершины
так вот я хочу чтобы допустим в вершине 3 вершины, нужно чтобы заполнились эти 3 вершины, далее
допустим в 1м поддереве 2 вершины нужно чтобы эти 2 вершины заполнились и так далее...
Никто наверно не понял ничего, вот и не отвечает никто... 

Автор: Peter 27.3.2010, 14:55
Цитата(toxx @  26.3.2010,  21:49 Найти цитируемый пост)
Никто наверно не понял ничего

Наверное, ты сам не понял, чего хочешь. После заполнения очередной вершины как надо продолжать заполнение - идти "в глубину" или "в ширину"? (Т.е. на следующий уровень спускаться или проверять текущий уровень?)
Делается это вначале на бумажке. Задай максимальную размерность (количество "сыновей") вершины не 10000, а 3. Затем вручную забей в дерево штук 20 значений. Будет у тебя 20 картинок последовательных состояний дерева. А тогда и соображай, как это записать в программе.

Автор: toxx 27.3.2010, 23:58
Цитата(Peter @ 27.3.2010,  14:55)
Цитата(toxx @  26.3.2010,  21:49 Найти цитируемый пост)
Никто наверно не понял ничего

Наверное, ты сам не понял, чего хочешь. После заполнения очередной вершины как надо продолжать заполнение - идти "в глубину" или "в ширину"? (Т.е. на следующий уровень спускаться или проверять текущий уровень?)
Делается это вначале на бумажке. Задай максимальную размерность (количество "сыновей") вершины не 10000, а 3. Затем вручную забей в дерево штук 20 значений. Будет у тебя 20 картинок последовательных состояний дерева. А тогда и соображай, как это записать в программе.

Сделал как вы сказали=)Нарисовал теперь знаю чего хочу.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)