计算机程序设计艺术,4A组合算法J的实现:
void combineJ(int n, int t)
{
//C(n,t)
int c[COMBINE_MAXN]; //c[0] is not used
int j, i;
// Initializing
for (j = 1; j <= t; j++)
{
c[j] = j - 1;
}
c[t + 1] = n;
c[t + 2] = 0;
//main loop
for (;;)
{
//visit
for (i = t; i >= 1; i--)
{
printf("%d", c[i]);
}
printf("\n");
//Find j
j = 1;
while (c[j] + 1 == c[j + 1])
{
c[j] = j - 1;
j++;
}
//Done?
if (j > t)
{
break;
}
c[j]++;
}
}