0

我一直在研究一个问题,我必须合并 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;
}
4

0 回答 0