首页 > 代码库 > Enumerate Combination C(k, n) in a bitset
Enumerate Combination C(k, n) in a bitset
Suppose n<=32, we can enumerate C(k, n), with bits representing absence or presence, in the following way:
#include <iostream> #include <vector> #include <bitset> using namespace std; bitset<32> getComb(const vector<int> &comb) { bitset<32> bitcombs; for (int i=0; i<comb.size(); ++i) bitcombs.set(comb[i], true); return bitcombs; } bool nextComb(vector<int> &comb, int n) { int k = comb.size(), i = k - 1; ++comb[i]; while (i>=1 && comb[i]>=n-k+1+i) ++comb[--i]; if (comb[0] > n-k) return false; for (++i; i<k; ++i) comb[i] = comb[i-1] + 1; return true; } int main() { int n = 3, k = 2; vector<int> comb(k); for (int i=0; i<k; ++i) comb[i] = i; do { cout<<getComb(comb).to_ulong()<<endl; } while (nextComb(comb, n)); return 0; }
01111->10111->11011->11101->11110
So, could you find the pattern?
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。