【发布时间】:2020-03-25 18:00:11
【问题描述】:
我需要一种算法来将无向图的顶点划分为一个或多个子图,这样每个子图都是一个完整的图(每个顶点都与其他每个顶点相邻)。每个顶点都需要恰好位于其中一个子图中。
这是一个例子:
input = [
(A, B),
(B, C),
(A, C),
(B, D),
(D, E),
]
output = myalgo(input) # [(A, B, C), (D, E)]
这里有一张更能描述问题的图片:
输入列表按距离降序排列,这就是我连接 A-B-C 而不是 B-D 的原因。
我认为这可能被称为“强连接组件”,并且已经尝试了以下解决方案:
Finding a Strongly Connected Components in unDirected Graphs: 它在寻找不同的东西
Finding all cycles in undirected graphs:它给了我很多个循环,而不是最好的,它不关心输入顺序。
An algorithm to create clusters from data pairs in python:它连接所有组件,只是因为它们之间有一条路径(A-B-C-D-E)。
Kosaraju's algorithm:它只适用于有向图。
【问题讨论】:
-
“强连接”是指“组件内的所有元素必须直接相互链接”?
-
@LukasThaler 是的
-
听起来很有趣。让我看看我能想出什么:D
标签: python algorithm graph data-science