制作无向图

时间:2014-10-08 02:44:24

标签: python graph directed-acyclic-graphs

我有一个无向的,完整的图形,并希望将其转换为在每个节点之间具有(单向)路径的有向非循环图。首先,我想添加随机边缘并在连接所有节点后停止。要看什么算法(使用Python,但任何语言都可以)。

因此,例如此图表,不再进行任何连接:

A  ---- B            A ---> B
 \     /      =>           /
  \   /                   v
    C                    C

,但在这种情况下,所有无向边都变成有向边

A  ---- B            A ---> B
 \     /      =>      ^     ^
  \   /                \   /
    C                    C

更新

请注意,目标是根据上述约束将无向图转换为有向图。与生成树一样,此转换过程有多个解决方案(如上例所示)。

1 个答案:

答案 0 :(得分:0)

您需要一个定向生成树。

在无向图中找到定向生成树很容易。只需进行深度优先搜索,忽略后退和交叉边缘。实际遍历的边形成一个有向树,触及每个连接组件中的每个节点。

但是,您已添加了您希望边缘选择是随机的限制。

因此,您可以使用Kruskal's algorithm等最小生成树算法和随机边权重。

请注意,没有理由实际存储和计算随机边权重。算法的第一步是按重量进行排序。因此,通过边缘的随机排列来替换这种排序,您就可以了。