我有一个无向的,完整的图形,并希望将其转换为在每个节点之间具有(单向)路径的有向非循环图。首先,我想添加随机边缘并在连接所有节点后停止。要看什么算法(使用Python,但任何语言都可以)。
因此,例如此图表,不再进行任何连接:
A ---- B A ---> B
\ / => /
\ / v
C C
,但在这种情况下,所有无向边都变成有向边
A ---- B A ---> B
\ / => ^ ^
\ / \ /
C C
更新
请注意,目标是根据上述约束将无向图转换为有向图。与生成树一样,此转换过程有多个解决方案(如上例所示)。
答案 0 :(得分:0)
您需要一个定向生成树。
在无向图中找到定向生成树很容易。只需进行深度优先搜索,忽略后退和交叉边缘。实际遍历的边形成一个有向树,触及每个连接组件中的每个节点。
但是,您已添加了您希望边缘选择是随机的限制。
因此,您可以使用Kruskal's algorithm等最小生成树算法和随机边权重。
请注意,没有理由实际存储和计算随机边权重。算法的第一步是按重量进行排序。因此,通过边缘的随机排列来替换这种排序,您就可以了。