#include<cstdio> #include<cstring> #include<algorithm> #include<cstdlib> #include<iostream> #include<queue> #include<vector> #include<sstream> using namespace std; const int maxn = 999999; int P[maxn], A[maxn]; int n; void print(int n,int *P, int *A,int cur){ if(cur == n){ for(int i = 0; i < n; i++) printf("%d ",A[i]); printf("\n"); return ; } for(int i = 0; i < n; i++) if(!i||(P[i-1] != P[i])){ int c1 = 0, c2 = 0; for(int j = 0; j < cur; j++) if(A[j] == P[i]) c1++; for(int j = 0; j < n; j++) if(P[i] == P[j]) c2++; if(c1 < c2){ A[cur] = P[i]; print(n,P,A,cur+1); } } } int main(){ scanf("%d",&n); for(int i = 0; i < n; i++) scanf("%d",&P[i]); sort(P,P+n); print(n, P, A, 0); return 0; }
简单记忆版
看下面
#include<cstdio> #include<cstring> #include<algorithm> #include<cstdlib> #include<iostream> #include<queue> #include<vector> #include<sstream> using namespace std; const int maxn = 999999; int P[maxn]; int n; int main(){ scanf("%d",&n); for(int i = 0; i < n; i++) scanf("%d",&P[i]); do{ for(int i = 0;i < n; i++) printf("%d ",P[i]); printf("\n"); }while(next_permutation(P,P+n)); return 0; }