组合数的实现

求出从数组a中取出n个元素的所有组合

#include
using namespace std;
int a[10];

//按索引从小到大
//这里的start是数组头部a[0]的下标0
void DFS1(int a[], int start, int a_len, int result[], int count, int num)
{
	for (int i = start; i < a_len + 1 - count; ++i) //i为数组a的某个索引
	{
		result[count - 1] = i;   //储存索引
		if (count == 1)
		{
			for (int j = num - 1; j >= 0; j--)
			{
				cout << a[result[j]] << " ";
			}
			cout << endl;
		}
		else DFS1(a, i + 1, a_len, result, count - 1, num);
	}
}

//按索引从大到小
//这里的start是数组尾部a[n-1]的下标n-1
void DFS2(int a[], int start, int result[], int count, int num)//i为数组a的某个索引
{

	for (int i = start; i >= count-1; i--)
	{
		result[count - 1] = i; //储存索引
		if (count == 1)
		{
			for (int j = num - 1; j >= 0; j--)
			{
				cout << a[result[j]] << " ";
			}
			cout << endl;
		}
		else DFS2(a, i - 1, result, count - 1, num);
		
	}
}
int main()
{
	freopen("input.txt", "r", stdin);
	int result[6];
	for (int i = 0; i < 10; ++i) cin >> a[i];
	DFS1(a, 0, 10, result, 6, 6);
	cout << endl << endl;
	DFS2(a, 9, result, 6, 6);
	return 0;
}

你可能感兴趣的:(组合数的实现)