输入数组P,并按字典序输出数组P各元素的全排列到A(注意:P有序),例如P序列为:1 1 2,则对应的排序结果为:(1,1,2)、(1,2,1)、(2,1,1)。以下是该算法的c源码,P数组长度可以自己调整。
程序运行结果
程序运行结果
------------------------------------c源码----------------------------------------
#include<stdio.h>
#include<time.h>
void print_permutation(int n,int *P,int *A,int cur){
int i,j;
if(cur==n){
for(i=0;i<n;i++)
printf("%d",A[i]);
printf("\n");
}
else for(i=0;i<n;i++){
if(!i||P[i]!=P[i-1]){
int c1=0,c2=0;
for(j=0;j<cur;j++){
if(A[j]==P[i])
c1++;
}
for(j=0;j<n;j++){
if(P[i]==P[j])
c2++;
}
if(c1<c2){
A[cur]=P[i];
print_permutation(n,P,A,cur+1);//递归调用
}
}
}
}
void main(){
int n,m;
int A[1000];
int P[4];//可以自己修改
int i=0;
while(scanf("%d",&m)==1){
P[i]=m;
i++;
}
n=i;
print_permutation(n,P,A,0);
printf("time used:%.2lf\n",(double)clock()/CLOCKS_PER_SEC);
}
------------------------------------c源码----------------------------------------