Я работал над проблемой, в которой я должен взять объединение из 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;
}
Задача ещё не решена.
Других решений пока нет …