小白 7.2.2
输入数组p,并按字典序输出数组A各元素的所有全排列
#include<iostream> using namespace std; #define max 10000 int a[max]; int p[]={3,2,1}; void pailie(int n,int *p,int*a,int cur) { int i,j; if(cur==n) { for(i=0;i<n;i++) cout<<a[i]; cout<<endl; } else for(i=1;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]; pailie(n,p,a,cur+1); } } } int main() { int n,i; while(scanf("%d",&n)==1) { for(i=0;i<n;i++) a[i]=i+1; pailie(n,p,a,0); } return 0; }