- 论坛徽章:
- 0
|
下面是我刚才实现的非递归方式的源代码,有没有更精巧的实现,大家讨论一下。
#include <stdio.h>
#include <math.h>
int BinaryPlus(char *list, int len);
int PrintSubset(char *subset, char *list, int len);
int main(int argc, char *argv[]) {
int i, len, power;
char *p;
if (argc != 2) {
fprintf(stderr,"USAGE: listsubsets <SETS>\n");
return 0;
}
len = strlen(argv[1]);
p = (char *)malloc(len);
if (p == NULL) {
fprintf(stderr, "ERROR: can not allocate memory!\n");
return;
}
memset(p, 0x00, len);
power = pow(2, len);
for (i = 0; i < power; i++) {
  rintSubset(argv[1], p, len);
putchar('\n');
BinaryPlus(p, len);
}
free(p);
return 0;
}
int BinaryPlus(char *list, int len) {
int i;
for (i = 0; i < len; i++) {
list[i] = (++list[i]) % 2;
if (list[i] == 1)
break;
}
return 0;
}
int PrintSubset(char *subset, char *list, int len) {
int i;
for (i = 0; i < len; i++)
if (list[i] == 1)
putchar(subset[i]);
return 0;
} |
[ 本帖最后由 ryuken2000 于 2007-9-13 14:37 编辑 ] |
|