现在的位置: 首页 > 综合 > 正文

深度优先选择DFS 5个数中选择3个数组和

2011年07月11日 ⁄ 综合 ⁄ 共 615字 ⁄ 字号 评论关闭
/*
* 使用深度优先选择(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);
}

抱歉!评论已关闭.