#include "iostream"
using namespace std;
int myfactorial(int n)
{
int i,factorial;
i = 1;
factorial = 1;
while(i <= n)
{
factorial = factorial * i; //递归思想
i++;
}
return factorial;
}
void permutation(int* a,int k,int m,int **perm_list,int *Num)
{
int tmp;
int i,j;
if(k == m)
{
// 输出结果
//for(i=0;i<=m;i++)
// cout<<a[i];
//cout<<endl;
// 记录结果
for (i=0;i<=m;i++)
{
perm_list[*Num][i] = a[i];
}
*Num = *Num + 1;
}
else
{
for(j=k;j<=m;j++)
{
//交换
tmp = a[j];
a[j] = a[k];
a[k] = tmp;
permutation(a,k+1,m,perm_list,Num);
//交换
tmp = a[j];
a[j] = a[k];
a[k] = tmp;
}
}
}
int main(void)
{
int len;
len = 5;
int len_fact;
len_fact = myfactorial(len);
int *a = new int [len];
for (int i=0;i<len;i++)
{
a[i] = i;
}
int **perm_list = new int *[len_fact];
for (int i=0;i<len_fact;i++)
{
perm_list[i] = new int [len]();
}
int Num;
Num = 0;
permutation(a,0,len-1,perm_list,&Num);
//输出排列情况
printf("共%d种排列:\n",Num);
for (int i=0;i<Num;i++)
{
for (int j=0;j<len;j++)
{
printf("%d ",perm_list[i][j]);
}
printf("\n");
}
system("pause");
return 0;
}
一组整数的全排列【C程序】
猜你喜欢
转载自blog.csdn.net/lyc_daniel/article/details/51004598
今日推荐
周排行