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.