繁体   English   中英

无向无环图边插入

[英]undirected acyclic graph edge insertion

如果图是非循环的,是否有任何算法可以在无向图中插入节点?

例如:如果图形如下所示

0 - 1
|
2 - 3
4 - 5

有效插入:2-4

0 - 1
|
2 - 3
|
4 - 5

无效插入:1 - 3

0 - 1
|   |   <=== cyclic!!!
2 - 3
4 - 5

如果有任何使用 C++ 的示例代码,我将不胜感激。

您可以为顶点集维护一个不相交集的数据结构 该结构有以下操作:

  • find(x)返回x所属集合的标识符,
  • union(x,y)合并xy的集合。
  1. 从每个顶点的集合开始。
  2. 在添加一条边之前,检查它的两端是否在同一个集合中。
  3. 如果不是,则添加边并合并相应的集合。

对于您的示例,数据结构的状态如下:

  • S1 = {0,1,2,3}
  • S2 = {4,5}

当您尝试添加边 1-3 时,您会发现顶点 1 和 3 属于同一集合 S1,因此您跳过添加。

当您尝试添加边 2-4 时,您会发现顶点 2 和 4 属于不同的集合(相应地是 S1 和 S2),您添加这条边,并将结构更新为:

  • S1 = {0,1,2,3,4,5}

暂无
暂无

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

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