将简单的有向图转换为简单的无向图

时间:2013-05-04 01:32:18

标签: algorithm graph

如何将简单的有向图转换为简单的无向图?

这可能吗?

3 个答案:

答案 0 :(得分:1)

假设:(来自here

  

在简单的有向图循环中是不允许的。 (循环是一个将顶点与自身配对的弧。)

和:(来自here

  

一个简单的[无向]图是一个无向图,它没有环(两端连接到同一个顶点的边),并且在任意两个不同的顶点之间只有一条边。

我假设边缘未加权,否则如果不指明如何进行此操作就无法完成。

AM =邻接矩阵

AL =邻接列表

  • 删除所有边缘的方向。

    AM:对于每个边A-> B,已经设置了行A,列B.同时设置B行,A列。

    AL:对于每条边A-> B,边缘已经出现在A的AL中,也将边加到B的AL上。

  • 遍历所有边缘,移除我们已经在作为该边缘的端点的两个顶点之间找到边缘的所有边缘(因此,如果AB已经被处理,如果我们找到另一个AB(或者等效BA),我们必须删除那个边缘)。这需要完成,因为在简单有向图中顶点之间可能存在多条边,但这不会发生在简单的无向图中。

    上午:没有什么需要做的,因为AM强迫那里只有顶点之间的单个边缘,所以我们只是覆盖边缘。

    AL:对于每个顶点A,对于其邻接列表中的每个边A-B或B-A,删除列表中的所有其他边A-B或B-A。

答案 1 :(得分:1)

A demonstration Source and details...

  

对于每个有向边e =(x,y),添加新顶点ve1,...,ve5并用边xve1,ve1ve2,ve1ve3,ve3ve4,ve4ve5,ve3y替换e。

     

要解码,其邻居具有2级的每个叶子(1度顶点)对于某些边缘e =(x,y)必须是ve5;它的邻居是ve4,ve4的另一个邻居是ve3。 ve3有一个唯一的邻居,它具有3级并且与叶子相邻:邻居是ve1,叶子是ve2(如果ve1有两个叶子邻居,任意选择一个为ve2)。 ve1的另一个邻居是x,而ve3的另一个邻居是y。恢复有向边(x,y)并删除顶点ve1,...,ve5。

答案 2 :(得分:0)

G=(V,E)是有向图。 (a,b) \in E是一个有针对性的边缘。 G' = (V, E')是等效的无向图,(a,b)转换为(a,b)(b,a)。 因此,边缘定向边缘变成两个边缘(每个方向一个)。