#include <set> #include <vector> #include <algorithm> using namespace std; bool power_set(set<set<int> > &powset); void make_power_set(set<int> &s,set<set<int> > &ps); set<int> array_to_set(int *v,int n); bool power_set(set<set<int> > &powset) { set<int> s; for(set<set<int> >::iterator iter=powset.begin(); iter!=powset.end();iter++) { if(iter->size()>s.size()) s=*iter; } set<set<int> > ps; make_power_set(s,ps); return (powset==ps); } void make_power_set(set<int> &s,set<set<int> > &ps) { int len=s.size(); vector<bool> state(len+1); vector<int> vals(len); copy(s.begin(),s.end(),vals.begin()); while(!state[len]) { set<int> temp; int i; for(i=0;i<len;i++) if(state[i]) temp.insert(vals[i]); i=0; while(state[i]) { state[i]=false; i++; } state[i]=true; ps.insert(temp); } } int main(int argc,char **argv) { set<set<int> > test; int test_size; cout << "number of entries? "; cin >> test_size; for(int i=0;i<test_size;i++) { set<int> temp; int temp_size; cout << "set " << i+1 << ":" << endl; cout << "number of elements? "; cin >> temp_size; if(temp_size!=0) { cout << "elements: "; for(int j=0;j<temp_size;j++) { int t; cin >> t; temp.insert(t); } } test.insert(temp); } cout << "your input is:" << endl; for(set<set<int> >::iterator i=test.begin();i!=test.end();i++) { cout << "( "; copy(i->begin(),i->end(),ostream_iterator<int>(cout," ")); cout << ")" << endl; } if(power_set(test)) cout << "good" << endl; else cout << "bad" << endl; return 0; }