| Rev | Line |  | 
|---|
| [555] | 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.