【发布时间】:2020-06-04 10:24:40
【问题描述】:
我有一个存储在标准向量中的数字列表。其中一些数字是其他数字的子代。这是一个例子
3, 4
3, 5
5, 6
7, 3
8, 9
8, 1
8, 2
9, 8
或者作为图表:
1 2 3-4 5-6 7 8-9
|-------------|
|-----------|
|---|
|-------|
即有两个簇 3,4,5,6,7 和 1,2,8,9。根号是簇的最小号。这里是 3 和 1。我想知道我可以使用哪些算法来提取这样的列表:
3, 4
3, 5
3, 6
3, 7
1, 2
1, 8
1, 9
【问题讨论】:
-
该向量中的数字是如何存储的?
-
可能有更好的方法,但您可以创建一个名为 cluster 的结构,其中包含节点和边。创建一个集群列表,每个数字一个集群。将数字添加到节点以及与边的每个关系。迭代集群并合并具有公共边的集群。删除一个集群和另一个集群之间的所有边。重复,直到您删除所有边缘。找到根值。
-
数字是否总是 1 到 N 或相似的?换句话说,它们可以用作索引吗?
-
@Nelfeal 数字不能总是用作索引。
-
@ThomasSablik 目前我正在使用以下数据结构:
std::vector<std::vector<unsigned int>> list。处理后列表大小为N x 2。
标签: c++ algorithm graph-algorithm