我有以下数据结构:
set< pair<int, int> > data;
data = {<1, 1> ; <3, 2> ; <5, 5> ; <5, 4> ; <4, 2>, <1, 8>, <9, 9> }我希望合并包含至少一个公共元素的对,并将结果存储在集合向量中。
vector< set<int> > result;
result = [ {1, 8} ; {2, 3, 4, 5} ; {9} ]我知道在set_union中有一个<algorithm>,但是我们如何计算对的“并”呢?谢谢!
发布于 2014-03-30 15:14:42
正如Jarod42所指出的,您需要由边缘列表定义的图的连接组件。下面是如何让那些使用STL的人。
map<int, set<int> >,它将每个整数映射到它在对中共同出现的整数集。这可以通过对向量进行一次迭代,将.second添加到.first's集合,将.first添加到.second's。vector<set<int> >。保留已处理的整数的set<int> (最初为空)。循环遍历邻接列表的条目。对于未出现在已处理集合中的每个整数键,按照以下步骤构造下一个组件,并将其推回向量,然后与该组件合并更新处理过的整数集。stack<int>。初始化一个空的set<int>,即当前连接的组件。当堆栈不是空的时候,获取它的顶部整数并弹出它。如果该整数未出现在组件中,则执行以下操作。将整数插入组件中,然后在邻接列表中查找并将其所有邻居推到堆栈上。https://stackoverflow.com/questions/22744644
复制相似问题