合算法:从m个数中选n个数的所有组合

#include <iostream>
using namespace std;
int combine(int a[], int n, int m)
{   
	m = m > n ? n : m;

	int* order = new int[m+1];    
	for(int i=0; i<=m; i++)
		order[i] = i-1;            

	int count = 0;                                
	int k = m;
	bool flag = true;           
	while(order[0] == -1)
	{
		if(flag)                  
		{   
			for(int i=1; i<=m; i++)
			{
				cout << a[order[i]] << " ";
			}
			cout << endl;
			count++;
			flag = false;
		}

		order[k]++;              
		if(order[k] == n)          
		{
			order[k--] = 0;
			continue;
		}     

		if(k < m)                  
		{
			order[++k] = order[k-1];
			continue;
		}

		if(k == m)
			flag = true;
	}

	delete[] order;
	return count;
}

int main()
{
	const int M = 3;
	const int N = 2;
	int a[M];
	int b[N];
	for(int i=0;i<M;i++)
		a[i] = i+1;

	cout<<combine(a,M,N)<<endl; 
	system("pause");
	return 0;
}

原文地址:https://www.cnblogs.com/byfei/p/14104352.html