递归实现
组合数:
void extract1(vector<int> &v, int n, int m,int k)
{
if (m <= 0){
for (int i = 0; i < v.size(); i++)
cout << v[i];
cout << endl;
return;
}
for (int i = n; i >= m; i--){
v[k] = i;
extract1(v, i - 1, m - 1, k + 1);
}
}
void combine_number(int n, int m)
{
vector<int> v(m);
extract1(v, n, m, 0);
}
全排列:
void swap(int *A, int i, int j)
{
int t = A[i];
A[i] = A[j];
A[j] = t;
}
void full_permutation(int A[],int left,int right)
{
if (left == right){
for (int i = 0; i <= right; i++)
cout << A[i];
cout << endl;
return;
}
for (int i = left; i <= right; i++){
swap(A, left, i);
full_permutation(A, left + 1, right);
swap(A, i, left);
}
}