如何将无向,非常循环的图转换为有向无环图?

时间:2010-12-15 02:02:52

标签: graph

我正在研究修改后的TopSort算法,并且无法查找/创建用于测试的大型(超过1000个节点)有向非循环图。我有一个来自另一个项目的无向样本图,它具有良好的大小,但有很多周期。是否有一种算法可以用来指导边缘,以便不再有周期?

3 个答案:

答案 0 :(得分:4)

this提供了获取非循环图的方法。基本上,图遍历会生成一个树,该树定义原始节点上的部分顺序。然后,只需指向所有边缘,使它们根据部分顺序指向一致的方向,或者指向未排序的2个元素(这些元素可以指向任何方向)。

答案 1 :(得分:0)

为了让新的有向图连接,我会使用如下的第一个搜索。

 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)

您希望将图表转换为根树林。对图的每个组件进行广度优先或深度优先的图遍历。在遍历期间,在父子顶点之间创建有向边。

请参阅http://en.wikipedia.org/wiki/Graph_traversal