生成n位二进制数的所有可能组合,其中k位总是仅使用回溯来设置

时间:2017-04-01 20:05:37

标签: c++ algorithm combinations backtracking

在回溯时遇到如何设置位的问题。无法在输出中排除001,010和100。提供算法会非常有帮助。

void printwithKbitset(int n,int k,int arr[],int index) { if(k==0) { for(int i=0;i<3;i++) cout<<arr[i]; cout<<"\n"; return; } if(n>1) printwithKbitset(n-1,k,arr,index+1); if(k>0) { arr[index]=1; printwithKbitset(n,k-1,arr,index); arr[index]=0; } Output: 001 011 010 101 110 100

{{1}}

1 个答案:

答案 0 :(得分:0)

要走的路是使用std::next_permutation

#include <algorithm>
#include <iostream>
#include <vector>

void print(const std::vector<int>& v)
{
    for (auto e : v) {
        std::cout << e << " ";   
    }
    std::cout << std::endl;
}

int main()
{
    std::vector<int> v {0, 1, 1};

    do {
        print(v);
    } while (std::next_permutation(std::begin(v), std::end(v)));
}

Demo