繁体   English   中英

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

[英]Transform a simple directed graph to a simple undirected graph

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

这可能吗?

假设:(从这里

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

和:(从这里

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

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

AM =邻接矩阵

AL =邻接列表

  • 删除所有边缘的方向。

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

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

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

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

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

示威 来源和细节......

对于每个有向边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。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM