题目:求N的全排列
N的全排列就是N-1的全排列排列与N的排列。依此类推,N-1的排列就是N-1 与 N-2的全排列的排列, N-2...
当N=1时就只有1的全排列1。那么算法的思想就是先确定一个前缀,然后递归求解N-1,N-2...的全排列。
void Perm(char *a, int begin, int end) /* 产生begin到end的全排列 */
{
int i;
if(begin == end){ /* 一直计算到了N为1的情况, 此次全排列计算结束,输出*/
for(i=0; i<=end; i++)
printf("%c",a[i]);
printf(" ");
}
else{
for(i=begin; i<=end; i++){
Swap(a,begin,i); /*交换前缀,使之产生下一个前缀.*/
Perm(a,begin+1,end);
Swap(a,begin,i); /*将前缀换回来,继续做上一个的前缀排列.*/
}
}
}
void Swap(char *a, int m, int n)
{
char temp;
temp = a[m];
a[m] = a[n];
a[n] = temp;
}
这个算法的核心就是是将第begin个元素与后面的每个元素进行交换,求出其全排列。
阅读(1380) | 评论(0) | 转发(0) |