//程序思想:每次两个数两两交换,输出一组结果,再换回去成为原始的顺序
//递归思想:对m个数排列组合可拆解为固定最后一个数,对前m-1个排列组合,然后让第1个数与第m个数交换位置
#include <stdio.h>
#define MAX 20
int c[MAX] = {0};
int M, N ;
void print();
void comp(int);
int main()
{
int i;
printf("Please input M = ");
scanf("%d", &M);
printf("M = %d\n", M);
//对M个整数进行初始化
for(i = 0;i < M;i++)
scanf("%d",c+i);
comp(M);
return 0;
}
void print()
{
int i;
for (i = 0; i < M; i++)
{
printf("%d", c[i]);
}
printf("\n");
}
void comp(int m)
{
int i,temp;
if (m == 1)
{
print();
return;
}
comp(m - 1);
for (i = 0;i < m-1; i++)
{
temp = c[i];//交换两个数,并输出结果
c[i] = c[m-1];
c[m-1] = temp;
comp(m-1);
//将两个数交换回去,再接着循环
c[m-1] =c[i];
c[i] = temp;
}
}
运行结果: