Power set: Difference between revisions
Content deleted Content added
→{{header|Prolog}}: replaced by cleaner version. non findall version will be added later. |
Recursive version of power set C++ |
||
Line 337: | Line 337: | ||
=={{header|C++}}== |
=={{header|C++}}== |
||
=== Non-recursive version === |
|||
<lang cpp>#include <iostream> |
<lang cpp>#include <iostream> |
||
#include <set> |
#include <set> |
||
Line 435: | Line 438: | ||
{ 7 } |
{ 7 } |
||
</pre> |
</pre> |
||
=== Recursive version === |
|||
<lang cpp>#include <iostream> |
|||
#include <set> |
|||
template<typename Set> std::set<Set> powerset(const Set& s, size_t n) |
|||
{ |
|||
typedef typename Set::const_iterator SetCIt; |
|||
typedef typename std::set<Set>::const_iterator PowerSetCIt; |
|||
std::set<Set> res; |
|||
if(n > 0) { |
|||
std::set<Set> ps = powerset(s, n-1); |
|||
for(PowerSetCIt ss = ps.begin(); ss != ps.end(); ss++) { |
|||
for(SetCIt el = s.begin(); el != s.end(); el++) { |
|||
Set subset(*ss); |
|||
subset.insert(*el); |
|||
res.insert(subset); |
|||
} |
|||
} |
|||
res.insert(ps.begin(), ps.end()); |
|||
} else |
|||
res.insert(Set()); |
|||
return res; |
|||
} |
|||
template<typename Set> std::set<Set> powerset(const Set& s) |
|||
{ |
|||
return powerset(s, s.size()); |
|||
} |
|||
</lang> |
|||
=={{header|C sharp|C#}}== |
=={{header|C sharp|C#}}== |