从 C++ 中的对向量生成组向量
Generate a vector of groups from vector of pairs in C++
我有一个整数对向量,看起来像这样:
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}
我想要这个,我想要一个有效的方式。谢谢。
直接应用Disjoint-set Data Structure即可解决此问题。
遍历对列表,并为找到的每个数值创建一个单例集。然后再遍历一次对,对由每对的两个元素表示的集合执行 union 操作。
鉴于文章中描述的正确表示,这可以在线性时间和 space 中非常有效地完成。
我有一个整数对向量,看起来像这样:
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}
我想要这个,我想要一个有效的方式。谢谢。
直接应用Disjoint-set Data Structure即可解决此问题。
遍历对列表,并为找到的每个数值创建一个单例集。然后再遍历一次对,对由每对的两个元素表示的集合执行 union 操作。
鉴于文章中描述的正确表示,这可以在线性时间和 space 中非常有效地完成。