Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 复制图形的一部分_Algorithm_Graph - Fatal编程技术网

Algorithm 复制图形的一部分

Algorithm 复制图形的一部分,algorithm,graph,Algorithm,Graph,我有一个图形数据结构,我需要复制它的一部分。每个节点最多有两个子节点,出于问题的考虑,可以假设如下所示: struct node { int type; struct node *child1, *child2; }; “类型”字段指示(仅在叶中)节点是必须复制、不能复制还是可以复制 我得到一个根节点,需要返回一个可以从该节点访问的子图副本。必须复制某些叶节点,并且必须与原始图形共享某些叶节点。由于原始图形不得损坏,因此如果必须复制非叶节点的任何子节点,则必须复制该节点。显然,

我有一个图形数据结构,我需要复制它的一部分。每个节点最多有两个子节点,出于问题的考虑,可以假设如下所示:

struct node {
    int type;
    struct node *child1, *child2;
};
“类型”字段指示(仅在叶中)节点是必须复制、不能复制还是可以复制

我得到一个根节点,需要返回一个可以从该节点访问的子图副本。必须复制某些叶节点,并且必须与原始图形共享某些叶节点。由于原始图形不得损坏,因此如果必须复制非叶节点的任何子节点,则必须复制该节点。显然,我更愿意只复制那些为了满足需求而必须复制的节点,尽管复制所有非叶节点可以满足需求

对于一棵树来说,只复制最小的集合是微不足道的,但是这个图可能包含循环。是否有一种有效的算法只复制所需的节点?特别是,不需要计算所有父指针或迭代直到找到固定点的指针?

您可以稍微修改以检测每个强连接组件是否需要副本。伪代码执行行

strongconnect(w)
v.lowlink := min(v.lowlink, w.lowlink)
对于深度优先搜索的每个树边
vw
,您可以向其中添加

v.needscopy := v.needscopy or w.needscopy

当从堆栈中弹出组件时,SCC根目录的
needScope
字段将是准确的。堆栈有效地构造了一些父指针,但您可能更容易接受。

关于父指针,我主要关心的是需要在每个节点上存储一个大小可变的指针数组的可能性。我完全可以接受你的解决方案。