#include
#include
void transform(char *p,int x); //一个置换函数,把元素前移一位,并把第一位放到最后
void trans_all(char *p,int x,int n,void (*fun)(char *,int)); //置换函数的组合和迭代 覆盖所有排列的算法
void print(char *p,int x);//定义输出序列的函数
int main()
{
char sequence[] = {'A','B','C'};
int i=0;
trans_all(sequence,1,3,print); //输出所有的排列 ,我能在这里再提供参数吗,尝试了很多方式,都失败了
return(0);
}
void transform(char *p,int x) //置换函数,左移元素,并把首元放到最后,p序列地址,x为序列长度
{
int i;
char s;
s=p[0];
for(i=0;i p[i]=p[i 1];
p[x-1]=s;
}
void trans_all(char *p,int x,int n,void (*fun)(char *,int)) //搞了一个下午终于行了,p还是序列地址,x是子序列参数(迭代的时候用)
{ //n是原序列的长度 ,fun是某个函数的指针 但是从声明无法知晓这个函数的参数,怎么解决呢
int i; // Perfect! Right?
for(i=0;i {
if(x trans_all(p,x 1,n,fun); //递归,有点像动态自动生成的代码,这里用来控制循环的嵌套数
else //令人庆幸的事 它工作了!!!!
(*fun)(p,n); //所使用的函数的参数已经限定了,不知道有什么办法能避免这种情况
transform(p,x); //要是能把参数和指针一起传递给函数就好了,呵呵
}
}
void print(char *p,int x) //输出函数
{
int t;
for(t=0;t printf("%c ",p[t]); // 这里可对每一个排列的操作,这个程序中我只是简单的输出了
printf("\n");
}
阅读(1597) | 评论(0) | 转发(0) |