打印组合数的所有情况
从n个数中选m个数
时间复杂度 O(n!/m!)
代码
#include<iostream>
#include<vector>
#include<cstring>
using namespace std;
typedef long long ll;
const int N = 14;
int array[N];
int selected[N];
vector<int> b;
//从n个数中选m个数 ,n不用变,只需记录m
void combination(int m,int n,int lastStartIndex){
if(m==0){
for(int i = 0;i< b.size();i++)
cout<<b[i]<<" ";
cout<<endl;
return;
}
for(int i = lastStartIndex + 1;i < n;i++){
if(selected[i]==1)continue;
b.push_back(array[i]);//这次选的是第i个数
selected[i]=1;
combination(m-1,n,i);
b.pop_back();
selected[i]=0;
}
}
void solve(){
memset(selected,0,sizeof(selected));
for(int i=0;i<N;i++)
array[i]=i+1;
combination(2,4,-1);
}
int main(){
solve();
return 0;
}
输出
1 2
1 3
1 4
2 3
2 4
3 4