首页 > 代码库 > 生成可重集的排列
生成可重集的排列
下面给出自己编写的代码:
1 #include<stdio.h> 2 int P[100],A[100]; 3 void print_permutation(int n,int* P,int* A,int cur) 4 { 5 int i, j; 6 if(cur == n) 7 { 8 for(i = 0; i < n; i++) 9 printf("%d ", A[i]); 10 printf("\n"); 11 } 12 else for(i = 0; i < n; i++) 13 if(!i || P[i] != P[i-1]) 14 { 15 int c1 = 0, c2 = 0; 16 for(j = 0; j < cur; j++) if(A[j] == P[i]) c1++; 17 for(j = 0; j < n; j++) if(P[i] == P[j]) c2++; 18 if(c1 < c2) 19 { 20 A[cur] = P[i]; 21 print_permutation(n, P, A, cur+1); 22 } 23 } 24 } 25 int main() 26 { int i, n; 27 scanf("%d", &n); 28 for(i = 0; i < n; i++) 29 scanf("%d", &P[i]); 30 print_permutation(n, P, A, 0); 31 return 0;32 }
还有一种是调用c++中stl库函数:next_permutation.
1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 int main() 5 { 6 int n,p[10]; 7 scanf("%d",&n); 8 for(int i=0;i<n;i++) scanf("%d",&p[i]); 9 sort(p,p+n);10 do{11 for(int i=0;i,n;i++) printf("%d ",p[i]);12 printf("\n");13 }while(next_permutation(p,p+n));14 return 0;15 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。