| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2180 人关注过本帖
标题:[求助]求排列组合
只看楼主 加入收藏
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 
// 嫰弟献丑啦:

// 互异元素的全排列(递归版)
// 元素个数可以调整,注意输出已排序
#include<stdio.h>
void QPL(int n)//n为元素个数
{ int i;
static char ans[12+1];
static char src[]="123456789abc";
static int N;
if(N==0)N=n;
if(n>12)return;
for(i=0;i<N;i++)
if(src[i])
{ ans[N-n]=src[i];
src[i]=0;//表示已取走
if(n>1)QPL(n-1);
else printf("%s\t",ans);
src[i]=ans[N-n];//归还
}
}
void main()
{ int n;//元素个数
scanf("%d",&n);
QPL(n);
}

落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-06-29 09:51
shensheng4
Rank: 1
等 级:新手上路
帖 子:80
专家分:0
注 册:2005-8-7
收藏
得分:0 
朋友,你这个取走归还的想法非常好啊。开眼界了。
我刚刚也写了一个,不是用递归,是先前我说的循环回溯。
请指点

int *para;
int count = 0;
int Local(int local, int length);
int checkEnd(int length);
void main()
{
int i, j, length;
char element[] ="abcdef";
length = 6;
para = (int *)malloc(sizeof(int) * length);
for(i = 0; i < length; i++)
para[i] = i;
while(1)
{
if(i == length) /* 输出结果 */
{
for(j = 0; j < length; j++)
printf("%2c", element[para[j]]);
printf("\n");
if((count++)%10 == 9)
{
printf("PRESS ANY KEY!\n");
getch();
}
if(checkEnd(length))
break;
i--;
}
else /*对第i位上的重新赋值*/
{
para[i] = Local(i, length); /*赋值*/
if(para[i] >= length) /*越界,向上回溯*/
{
for(j = i; j < length; j++)
para[j] = -1;
i--;
}
else /* 合法,继续 */
i++;
}
}
printf("__________END__________\n");
getch();
}
int Local(int local, int length)
{
int i, j;
for(i = (para[local] + 1); i < length; i++) /*此位上的值*/
{
for(j = 0; j < local; j++) /*与前面的值比较*/
if(para[j] == i)
break;
if(j >= local)
break;
}
return i;
}
int checkEnd(int length)
{
int i;
for(i = 0; i < length; i++)
if(para[i] != (length - 1 - i))
return 0;
return 1;
}

梦想是不可能实现的,正因为如此才值得我们去追寻。 这是我选择的路,即使付出一切,我也毫无怨言。
2006-06-29 12:16
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 
回复:(shensheng4)朋友,你这个取走归还的想法非常...
交流切磋,共同进步!


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-06-29 12:19
快速回复:[求助]求排列组合
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021308 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved