• 第七章按字典序全排列


     1 #include <cstdio>
     2 #include <iostream>
     3 
     4 using namespace std;
     5 
     6 //生成可重集的排列
     7 
     8 
     9 void print_permutation(int n,int* p,int* A,int cur)
    10 {
    11     if(cur==n)
    12     {
    13         for(int i=0;i<n;i++)
    14             printf("%d ",A[i]);
    15 
    16         printf("
    ");
    17     }
    18     else
    19     {
    20         for(int i=0;i<n;i++)
    21         {
    22             if(!i || p[i]!=p[i-1])                  //不重复不遗漏任何一个P[i]值
    23             {
    24                 int ca=0;
    25                 int cp=0;
    26 
    27                 for(int j=0;j<n;j++) if(p[i]==p[j]) cp++;
    28                 for(int j=0;j<cur;j++) if(p[i]==A[j]) ca++;
    29 
    30 
    31                                             //A中的某个值应该小于P中该值的个数才能执行
    32                                             //用于判断某个值还能否使用
    33                 if(ca<cp)                                
    34                 {
    35                     A[cur]=p[i];
    36 
    37                     print_permutation(n,p,A,cur+1);
    38                 }
    39             }
    40         }
    41     }
    42 }
    43 
    44 int main()
    45 {
    46     int A[100];
    47     int p[100];
    48 
    49     int n;
    50     cin>>n;
    51 
    52     for(int i=0;i<n;i++) scanf("%d",&p[i]);
    53 
    54     print_permutation(n,p,A,0);
    55 
    56     return 0;
    57 }
    58 
    59 
    60 //跳过代码本身去看算法,这就和具体实现没关系了,无论什么语言,什么结构

    思路就是书上写的从小到大取P中值v插到当前,当然v要是没用过的或者说是没用完的

    当有重复时要跳过重复的值

    利用stl快速实现

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <algorithm>
     4 
     5 using namespace std;
     6 
     7 int p[10];
     8 
     9 int main()
    10 {
    11     int n;
    12     cin>>n;
    13 
    14     for(int i=0;i<n;i++) scanf("%d",&p[i]);
    15 
    16     sort(p,p+n);
    17     
    18     do
    19     {
    20         for(int i=0;i<n;i++) printf("%d ",p[i]);
    21 
    22         printf("
    ");
    23     }while(next_permutation(p,p+n));
    24 
    25     return 0;
    26 }
    Yosoro
  • 相关阅读:
    jenkins无法显示html样式问题解决
    自定的 HttpModule 为什么总是执行两次
    符号服务器
    ThreadContext
    ThreadContext
    从代码看 asp.net 处理过程
    关于动态编译
    System.Web.HttpContext.Current 跟踪分析
    使用另一种方式实现会话功能
    for 与 foreach 性能
  • 原文地址:https://www.cnblogs.com/tclan126/p/7412475.html
Copyright © 2020-2023  润新知