我一直在研究一个问题,我必须合并 n 个集合,看看所有集合是否不相交。我在用着
set_union
我的代码草稿如下:
vector<int> I; // Vector to store union of all sets
vector<vector<int> >A; // Vectors whose union are to be taken
/* Read A */
repeat i from 0 to n-1
{
I_size=I.size();
Ai_size=A[i].size();
I.resize(I_size+Ai_size);
I=vector<int>(I.begin(),set_union(I.begin(),I.end(),A[i].begin(),A[i].end(),I.begin()));
if(*(--I.end())==0) // If two sets contain some common term, last element of I will be 0
Notify that the sets cannot be united // Break from the loop in case any two sets have common terms
}
如果 I 的最后一个元素为 0,我将退出循环,因为 A 中的任何向量都不会包含 0。上面的代码不起作用。它给出了一些未知的运行时错误。请建议我哪里出错了?
实际代码:
vector<vector<int> >A;
int n;
int SetIntersection()
{
vector<int> I;
for(int i=0; i<n; i++)
{
int I_size=I.size();
int Ai_size=A[i].size();
I.resize(I_size+Ai_size);
I=vector<int>(I.begin(),set_union(I.begin(),I.end(),A[i].begin(),A[i].end(),I.begin()));
if(*(--I.end())==0)
return 0;
}
return 1;
}
int main()
{
int x;
cin>>n;
for(int i=0; i<n; i++)
{
cin>>x;
A[i].push_back(x);
}
if(SetIntersection()==1)
cout<<"Sets are disjoint";
else
cout<<"Sets are not disjoint";
return 0;
}