| Line |  | 
|---|
| 1 | // subsets.h | 
|---|
| 2 | // Eric Aubourg         CEA/DAPNIA/SPP   octobre 1999 | 
|---|
| 3 |  | 
|---|
| 4 | #ifndef SUBSETS_H | 
|---|
| 5 | #define SUBSETS_H | 
|---|
| 6 |  | 
|---|
| 7 | template <class T> | 
|---|
| 8 | set<set<T> > getSetOfSubsets(set<T> const&); | 
|---|
| 9 |  | 
|---|
| 10 |  | 
|---|
| 11 | template <class T> | 
|---|
| 12 | set<set<T> > getSetOfSubsets(set<T> const& s) { | 
|---|
| 13 | set<set<T> > subsets; | 
|---|
| 14 | if (s.empty()) { | 
|---|
| 15 | subsets.insert(s); | 
|---|
| 16 | return subsets; | 
|---|
| 17 | } | 
|---|
| 18 |  | 
|---|
| 19 | set<T> s1 = s; | 
|---|
| 20 | T x = *(s1.begin()); | 
|---|
| 21 | s1.erase(s1.begin()); | 
|---|
| 22 | set<set<T> > sub1 = getSetOfSubsets(s1); | 
|---|
| 23 | subsets.insert(sub1.begin(), sub1.end()); | 
|---|
| 24 | for (set<set<T> >::iterator i = sub1.begin(); i != sub1.end(); i++) { | 
|---|
| 25 | s1 = *i; | 
|---|
| 26 | s1.insert(x); | 
|---|
| 27 | subsets.insert(s1); | 
|---|
| 28 | } | 
|---|
| 29 | return subsets; | 
|---|
| 30 | } | 
|---|
| 31 |  | 
|---|
| 32 | // subsets 1 2 3 : | 
|---|
| 33 | //    subsets 2 3 :  {} {2} {3} {23} | 
|---|
| 34 | //       + 1:        {1} {12} {13} {123} | 
|---|
| 35 |  | 
|---|
| 36 |  | 
|---|
| 37 | #endif | 
|---|
       
      
  Note:
 See   
TracBrowser
 for help on using the repository browser.