在回溯时遇到如何设置位的问题。无法在输出中排除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}}
答案 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)));
}