Graph 如何将一个无向的、非常循环的图转换为有向无环图?

Graph 如何将一个无向的、非常循环的图转换为有向无环图?,graph,Graph,我正在研究一种改进的TopSort算法,在查找/创建用于测试的大型(超过1000个节点)有向无环图时遇到困难。我有一个来自另一个项目的无向样本图,它的大小很好,但有很多循环。是否有一种算法可以用来引导边,这样就不再有循环?您正在寻找将图形转换为一个有根树的森林。对图形的每个组件进行宽度优先或深度优先的图形遍历。在遍历过程中,在父子顶点之间生成一条定向边 请参见提供了获取非循环图的方法。基本上,图遍历生成一棵树,树定义了原始节点上的偏序。然后,只需将所有边定向,使它们根据偏序指向一致的方向,或者位

我正在研究一种改进的TopSort算法,在查找/创建用于测试的大型(超过1000个节点)有向无环图时遇到困难。我有一个来自另一个项目的无向样本图,它的大小很好,但有很多循环。是否有一种算法可以用来引导边,这样就不再有循环?

您正在寻找将图形转换为一个有根树的森林。对图形的每个组件进行宽度优先或深度优先的图形遍历。在遍历过程中,在父子顶点之间生成一条定向边


请参见提供了获取非循环图的方法。基本上,图遍历生成一棵树,树定义了原始节点上的偏序。然后,只需将所有边定向,使它们根据偏序指向一致的方向,或者位于两个未排序的元素之间(这些元素可以指向任何方向)。

为了连接新的有向图,我将使用beadth first搜索,如下所示

 old_undirected graph G
 new_directed graph D
 dequeue Q
 v is any node in G
 add v to D
 Q.push_back(v)
 while(Q is not empty):
     v = Q.pop_front()
     for all neighbors u to v:
         if u in D
              add edge u->v to D
         else
              add u to D and add edge v->u to D
              Q.push_back(u)

 return D

此图应包含原始图的所有边,但方向应确保没有任何圆

嗯。。他不是想造树。他希望对每条边进行定向,以便生成的图形是非循环的。我并没有全部阅读,但我的理解是:本文的第2.1节描述了一种将有向图转换为DAG的方法(即中断循环)。您建议添加前面的步骤,使用图的(任意)遍历将无向图转换为有向图。