从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。 输入整数n,输出1 2......n的所有排列方案 如果n=1,输出结果后结束,否则,交换第i个与第1个元素的位置,然后输出第2个到第n个元素的全排列(i>=1&&i<=n)
非字典序
#include <stdio.h>
#define N 100
int a[N];//0号元素不用
int count=0;//输出的排列个数
int n=4;//实际元素个数
void print(){//输出
int i;
for(i=1;i<=n;i++){
printf("3d",a[i]);
count++;
printf("\n");
}
void swap(int i,int j){//交换
int t;
t=a[i];
a[i]=a[j];
a[j]=t;
}
void permutation(int start,int end){//输出数组中start,end区间所有元素的全排列
int i;
if(start==end){//只有一个元素时输出全排列
print();
return ;
}
for(i=start;i<=end;i++){//i从start开始,不是1
swap(start,i);
permutation(start+1,end);
swap(start,i);
}
}
int main(){
int i;
for(i=1;i<=n;i++){
a[i]=i;
permutation(1,n);
printf("%d",count);
return 0;
}