我的问题:我有一个图表制作node
结构扩展的图形结构在C
struct node {
node *n1;
node *n2;
}
的,我想添加一些成员做出一个新的结构newNode
struct newNode {
newNode *n1;
newNode *n2;
newNode *n3; // new member
int a; // new member
}
我想要保留原图中的“节点连接”,以便我能做
newNode *n;
n->n1->n2...
就像
node *n;
n->n1->n2...
,其中两个结构的N1(或N2)表示相同的节点在图中,同时我也可以做
newNode *n;
n->n1->a...
n->n1->n3...
是相当棘手的修改node
结构,因为它是在大型图书馆中定义。
我的想法是多了一个成员添加到newNode
结构
struct newNode {
node *n; // added member
newNode *n1;
newNode *n2;
newNode *n3;
int a;
}
首先,我创建一个newNode
n_new
每个node
n
。然后我遍历每一对n_new
s,比如说n_new1和n_new2,看看n_new1->n
和n_new2->n
看它们之间是否有连接,也就是n_new1->n->n1 == n_new2->n
或n_new1->n->n2 == n_new2->n
,反之亦然。如果是的话,我做n_new1->n1 = n_new2
或n_new1->n2 = n_new2
,反之亦然。
但时间复杂度为O(#node^2)
。效率低下。
还有其他想法吗?
P.S.该图是降阶二元决策图。
你想与他们new_node和节点的图形? – user3125280
@ user3125280我想保留原始节点(和连接),但也要添加一些新的节点。这两个结构首先应该代表相同的图表。 – linusz
啊我现在明白了 - 你想要基本上复制一个图形结构。你所描述的确实是一个非常缓慢的方法。我建议你谷歌复制图形数据结构或类似的。基本上复制一个节点,创建一个n_new,然后用旧节点的n1和n2的副本填充它的n1和n2。您将需要一种机制来确定您已经复制了哪个节点(可能除非您可以更改节点源,否则您可能需要在此处使用bst或hash)。 – user3125280