求一集合的所有子集是NP问题,复杂度非常大,速度当然慢了.
求组合数是下面的程序.
#include <stdio.h>
#include <stdlib.h>
const int MAXSIZE = 80;
int N,M;
int A[MAXSIZE], B[MAXSIZE];
void Print()
{
int i;
for (i = 0; i < M; ++i)
printf("%d ", B[i]);
printf("\n");
}
void Com(int n, int m)
{
int i;
for (i = n; i >= m; --i){ //抽屉原理
B[m] = A[i];
if (m > 0)
Com(i-1,m-1);
else
Print();
}
}
int main()
{
int i;
/* printf("%s", "Input N M = ");
scanf("%d%d", &N,&M);
*/
N = 5;
M=3;
if (N > MAXSIZE)
return 1; //越界
for (i = 0; i < N; ++i)
A[i] = i+1;
Com(N-1,M-1);
system("pause");
return 0;
}