Использование N-арных деревьев гномов в переполнении стека

Я пытаюсь реализовать N-арное дерево в c ++ с помощью glib, но, поскольку я не являюсь экспертом в области c ++, у меня возникают некоторые проблемы с поиском правильного использования. У кого-нибудь есть простой пример, написанный на C ++, чтобы помочь мне понять, как использовать основные функции? У меня есть особые проблемы с g_node_traverse, я просто не могу получить правильный GNodeTraverseFunc.

Вы можете найти описание N-арного Дерева здесь:
http://developer.gnome.org/glib/stable/glib-N-ary-Trees.html

Я нашел несколько примеров в c, но мне не удалось перевести их правильно на c ++ здесь:

http://www.ibm.com/developerworks/linux/tutorials/l-glib/section7.html

Пробовал с последним куском кода для n-арных деревьев.

Я ценю вашу помощь.

0

Решение


Ну, мне удалось запустить некоторый код. В основном проблема заключалась в приведении типов, потому что Gnome использует gpointers, а мои данные должны храниться в структуре. Итак, мой код:

    gboolean iter(GNode* n, gpointer data) {
node s=*(node *)(n->data);
int ID=g_node_depth(n);

if (G_NODE_IS_ROOT(n)==true)
{
std::cout<<"Node "<<ID<<" is a Root"<<std::endl;
}
else if (G_NODE_IS_LEAF(n)==true)
{
std::cout<<"Node "<<ID<<" is a Leaf"<<std::endl;
}

std::cout<<"Speed of Node "<<ID<<" is: "<<s.v<<std::endl;
return FALSE;
}

int main(){

node prueba,prueba1;
prueba.phi=0;
prueba.v=1;
prueba.x=50;
prueba.y=100; //Position in y

prueba1.phi=90;
prueba1.v=6;
prueba1.x=30;
prueba1.y=90;

GNode * root = g_node_new((gpointer) &prueba);
g_node_append(root, g_node_new((gpointer) &prueba1));

g_node_traverse(root, G_PRE_ORDER, G_TRAVERSE_ALL, -1, iter, NULL);

return 0;

}

Где моя структура:

    struct state {
double x;    //Position in x of a car
double y;    //Position in y "double phi; //Yaw angle of a car
double v;   //Speed of a car
};struct node {
double x;
double y;
double phi;
double v;
std::vector <state > trajectory;
};

Идея состоит в том, чтобы сохранить всю предыдущую «траекторию» в каждом узле, поэтому, если я выберу случайный узел / лист, мне не нужно будет реконструировать траекторию, а просто взять ее.

Этот код работает сейчас. Это может быть улучшено, и я открыт для любых комментариев.

Надеюсь это кому-нибудь пригодится.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]