/*
* 使用深度优先选择(DFS)算法,给定5个数,写下其中任意3个数的组合
* 使用递归方法,分为1个数、2个数、3个数 三层,并传进起始下标
*/
#include <stdio.h>
#define NUM_ALL 5
#define NUM_SELECT 3
int sum = 0;
int a[6] = {0,1,2,3,4,5};
int index[4];
void SumIsNine()
{
if (sum == 9) {
printf("Sum is 9: %d,%d,%d\n", index[1], index[2], index[3]);
} else {
printf("%d,%d,%d\n", index[1], index[2], index[3]);
}
}
void Combine(int numA, int indexPre)
{
int indexLast = NUM_ALL - NUM_SELECT + numA;
int indexNow;
for (indexNow = indexPre; indexNow <= indexLast; indexNow++) {
sum += a[indexNow];
index[numA] = indexNow;
if (numA == 3) {
SumIsNine();
} else {
Combine(numA+1, indexNow+1);
}
sum -= a[indexNow];
}
}
int main(void)
{
int numA = 1, indexStart = 1;
Combine(numA, indexStart);
}