将无向图转换为具有特定条件的有向图

时间:2018-12-09 04:33:22

标签: algorithm graph graph-theory directed-graph undirected-graph

给出

无向图,该图具有M个边和N个顶点,我们必须将每个边从uv转换为u-> v或v-> u,以使每个顶点的度数均匀。哪种方法或算法最适合用于最小时间复杂性。

3 个答案:

答案 0 :(得分:2)

这是另一种方法-我认为您不希望以n = 100,000进行高斯消去,所以我在网络上搜索了相关问题。

如果图形具有多个连接的组件,则可以单独考虑它们,因此我们假设它只有一个。

在组件上构建生成树,并将其中一个顶点标记为该树的根。根据需要固定边缘的方向,不在生成树上。从叶子开始,一次获取每个顶点,在处理该顶点之前先处理该顶点的所有子代。对于每个顶点,选择树边缘直到其父代的方向,以使其自身的度数均匀,并忽略对其父代的影响。除了根之外,每个顶点都有一条边与父节点相连,因此,除了根之外,对于每个顶点,都可以确保其度数是偶数。

当您到达根部时,没有留下任何可以更改方向的边,因此您无法更改其度数,这显然是偶数或奇数。如果一切都很好,那么每个顶点都具有度数。如果它是奇数,则您有一个顶点度数为奇数的顶点,而所有其他顶点度数为偶数,因此所有度数的总和为奇数。但是所有度数的总和只是图中的边数,您不能更改。如果图中的边数为奇数,则总是会有至少一个顶点具有奇数度的度,无论如何该问题都是不可能的。

答案 1 :(得分:1)

给每个边缘一个任意方向,并创建一个变量(当前未知),该变量说明是否需要更改该边缘的方向。

对于每个顶点,根据x或1 ^ x输入一条边,其中x是该边的未知数,而1 ^ x是1 XOR x = NOT x,这取决于分配给该边的原始方向是否为是否朝向那个顶点。

对于每个顶点,即使将这些方程式的结果异或在一起的结果为0,输入边的数量也是如此-这与说将mod 2将它们加在一起的结果为0相同。

因此,您有一个线性方程组mod 2,它与二进制线性方程组相同,并且可以使用高斯消去法来查看是否有解。

(这样做可能会有更多图论的方法,但是我认为这是一个解决方案)。

答案 2 :(得分:1)

您可以执行以下操作-> 您唯一需要做的就是在进行拓扑之前进行MST

https://www.geeksforgeeks.org/assign-directions-to-edges-so-that-the-directed-graph-remains-acyclic/