该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
/*
* 文件名:Permutation.c
* 用途:全排列算法
* 编程环境:WinXP SP2+CL 8.0
* 完成日期: 2006.2 Ver 0.01
* 作者: 88250
* 联系方式: E-mail: DL88250@gmail.com QQ:845765
*/
#include
#include
int count = 0;
void permutation(char per[], int m, int len)
{
int i;
char tmp;
if (m
permutation(per, m + 1, len);
for (i = m + 1; i
/* 选当次的排列“头” */
tmp = per[m];
per[m] = per[i];
per[i] = tmp;
permutation(per, m + 1, len);
/* 恢复上一次的排列 */
tmp = per[m];
per[m] = per[i];
per[i] = tmp;
}
}else{
++count; /* 对排列进行计数 */
/* 调整一下格式^^ */
printf("%s ", per);
}
return;
}
int main(void)
{
int i = time(NULL);
char per[] = "ABCD";
permutation(per, 0, strlen(per));
printf("The total: %d" , count);
return 0;
}
/*
* 文件名:Combination.c
* 用途:组合算法
* 编程环境:WinXP SP2+CL 8.0
* 完成日期: 2006.2 Ver 0.01
* 作者: 88250
* 联系方式: E-mail: DL88250@gmail.com QQ:845765
*/
#include
#define MAX_NUM 20
int comb[MAX_NUM];
void combination(int m, int n)
{
int i, j;
for (i = m; i >= n; i--){
comb[n] = i; /* 选择当前的“头”元素 */
if (n > 1){
/* 进入下一次更小的组合问题 */
combination(i - 1, n - 1);
}else{
/* 满了需要的组合数,输出 */
for (j = comb[0]; j > 0; j--){
printf("%c", comb[j] + 64);
}
printf(" ");
}
}
return;
}
int main(int argc, char *argv[])
{
comb[0] = 2;
combination(4, comb[0]); /* C(4, 2) */
return 0;
}