与排列相比,组合是不区分元素顺序的,为了消去相同元素不同顺序的干扰项,在
选取每一个组合项的元素时使该元素的位序大于已选好元素的位序即可。如果题目要求所有组合项按升序输出,只需事先将所有元素排序即可。
#include<stdio.h>
#include<stdlib.h>
#define LENL 6
#define LEN 15
int K;
int S[LEN];
int S1[LEN];
int cmp(const void *a, const void *b)
{
int *a0 = (int*)a;
int *b0 = (int*)b;
return *a0 - *b0;
}
void Arrange(int now, int last)
{
int i, j;
if(now == LENL)
{
for(i = 0; i < LENL - 1; i++)
printf("%d ", S1[i]);
printf("%d\n", S1[i]);
}
else
for(i = last; now + K - i >= LENL; i++)
{
S1[now] = S[i];
Arrange(now + 1, i + 1);
}
}
int main()
{
int i, j;
scanf("%d", &K);
int gard = 0;
while(K != 0)
{
for(i = 0; i < K; i++)
scanf("%d", &S[i]);
qsort(S, K, sizeof(int), cmp);
if(gard != 0)
putchar(10);
Arrange(0, 0);
gard++;
scanf("%d", &K);
}
}
posted on 2012-05-27 10:03
小鼠标 阅读(260)
评论(0) 编辑 收藏 引用 所属分类:
回溯