[英]Adding edges to an acyclic graph
我有一个有向和无向边的图,现在我想通过将无向边替换为有向边来消除无向边(每个无向边变成一个有向边)。 每个无向边缘都有两个可能性(用一个方向或另一个方向上的有向边缘替换它)。
如何确定无向边的方向,以便我的图保持非循环状态( DAG )?
我的方法:
在没有无向边的图形上进行拓扑排序,将无向边一个接一个地添加(使它们从较小的拓扑指向较大的指向)。
这似乎不起作用,因为拓扑排序创建了部分顺序(并非所有顶点彼此都可比),我需要的是总顺序(所有顶点都可比)。 如何将部分订单扩展到总订单?
我的方法失败的示例图:
有向边:
无向边缘:
根据定义,拓扑排序是线性顺序,每个线性顺序都是总顺序,因此从理论上讲,您的方法很好。 但是,您的实现是错误的。
即在您的拓扑顺序定义中,如果存在从a到b的边,则b <a。 但是在第二张图中,您打破了规则并从4到6添加了一条边(6> 4!),将顶点的标识符(8和4)与它们的拓扑顺序(4和6)混合在一起。
对我来说,您的方法似乎有效。 对顶点进行任何排序; 现有边缘的取向应使其指向“正确”,即从位置较低的顶点到位置较高的顶点。 这始终是可能的,并导致非循环有向图。
在下一步中,您也许可以使用Dedekind–MacNeille完成来生成包含初始顺序作为子集的总顺序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.