从C ++中的对向量生成组的向量

时间:2016-10-16 10:48:57

标签: c++ vector grouping std-pair

我有一个整数对的向量,看起来像这样:

pair[0] = {1, 2}
pair[1] = {5, 7}
pair[2] = {9, 3}
pair[3] = {4, 6}
pair[4] = {8, 6}
pair[5] = {1, 3}
pair[6] = {9, 6}

我需要将任何一对中的数字组合在一起。

例如,数字1与2和3配对,因此它们属于一个组。 3也与9配对,9与6配对,6配4,所以它们也需要成为第一组的一部分。

5和7不与第一组中的任何其他数字重叠,因此需要将它们放入自己的组中。

结果向量需要类似于:

group[0] = {1, 2, 3, 4, 6, 8, 9}
group[1] = {5, 7}

我想要这个,我希望这个有效。谢谢。

1 个答案:

答案 0 :(得分:1)

直接应用Disjoint-set Data Structure可以解决这个问题。

浏览对列表,并为找到的每个数值创建一个单例集。然后再次遍历对,在每对的两个元素表示的集合上执行 union 操作。

鉴于文章中描述的正确表示,这可以在线性时间和空间中非常有效地完成。