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#}}==