解决排列组合问题的常用算法是递归,当然有递归就会有相应的回溯算法,回溯算法效率往往更高,特别是对于大型的排列组合问题,递归会引起栈溢出,所以我给你回溯的例子,至于递归的可以看我最近的blog文章分析。
// a[1..n]表示候选集,m表示一个组合的元素个数
int combine(int a[], int n, int m)
{
int* order = new int[m+1];
order[0] = -1;
for(int i=1; i<=m; i++)
order[i] = i-1;
int count = 0;
int k = m;
bool flag = true;
while(order[0] == -1)
{
if(flag)
{
// 输出符合要求的组合
for(i=1; i<=m; i++)
cout << a[order[i]] << " ";
cout << endl;
count++;
flag = false;
}