與排列相比,組合是不區分元素順序的,為了消去相同元素不同順序的干擾項,在
選取每一個組合項的元素時使該元素的位序大于已選好元素的位序即可。如果題目要求所有組合項按升序輸出,只需事先將所有元素排序即可。


#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
小鼠標 閱讀(267)
評論(0) 編輯 收藏 引用 所屬分類:
回溯