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.