[英]Make undirected graph directed
我有一个无向的完整图,并希望将其转换为在每个节点之间具有(单向)路径的有向无环图。 首先,我想添加随机边缘,并在连接所有节点后停止。 要看的算法是什么(使用Python,但是任何语言都可以)。
因此,例如,此图不再连接:
A ---- B A ---> B
\ / => /
\ / v
C C
,但在这种情况下,所有未定向的边都变成有向边
A ---- B A ---> B
\ / => ^ ^
\ / \ /
C C
更新
请注意,其目的是按照上述约束将无向图转换为有向图。 就像生成树一样,此转换过程有多个解决方案(如上例所示)。
您需要一个定向生成树。
在无向图中找到有向生成树很容易。 只需进行深度优先搜索,即可忽略背面和交叉边缘。 您实际遍历的边缘形成一棵有向树,该树触及每个连接组件中的每个节点。
但是,您添加了希望边缘选择随机的限制。
因此,为此,您可以使用最小生成树算法,例如具有随机边缘权重的Kruskal算法 。
注意,没有理由实际存储和计算随机边缘权重。 该算法的第一步是按重量排序。 因此,将这种类型替换为边缘的随机排列,您就可以从事业务。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.