zoukankan      html  css  js  c++  java
  • 生成可重集的排列(字典排序)

    前面实现的字典排序算法

    描述:给出一个数组S,按字典排序输出所有的序列

    此时不在局限于数字,可以是字符

    可以改进生成1--n全排列的代码,但是问题是当S有重复元素时候不能解决问题

    出现重复:

    #include<iostream>
    using namespace std;
    int p[100]={0};
    char ans[100];
    char arr[100];
    void gcd(int n,int cur,int p[]){
        int i,j;
        if(cur==n){
            for(i=0;i<n;i++) cout<<ans[i];
            cout<<endl;
        }
        for(i=0;i<n;i++){
            if(!p[i]) {
                ans[cur]=arr[i];
                p[i]=1;
                gcd(n,cur+1,p);
                p[i]=0;
            }
        }
    } 
    
    int main()
    {
        int n;
        cin>>n;
        for(int i=0;i<n;i++)  cin>>arr[i];
        gcd(n,0,p);
    } 
    View Code

     next_permutation的使用,可以避免重复

    #include<iostream>
    #include<algorithm>
     using namespace std;
      int main()
      {
          int ans[4]={1,2,3,4};
          sort(ans,ans+4);    /* 这个sort可以不用,因为{1,2,3,4}已经排好序*/
          do                             /*注意这步,如果是while循环,则需要提前输出*/
          {
             for(int i=0;i<4;++i)
                 cout<<ans[i]<<" ";
             cout<<endl;
         }while(next_permutation(ans,ans+4));
         return 0;
     }
    View Code

     C++描叙

    #include<iostream>
    #include<algorithm>
    using namespace std;
    int main()
    {
        string str;
        cin>>str;
        int len=str.length();
        sort(str.begin(),str.end());
        while(next_permutation(str.begin(),str.end())){
            cout<<str<<endl;
        }
        
    } 
    View Code
  • 相关阅读:
    (10)C#静态方法,静态字段,静态类,匿名类
    (9)C#类
    (8)C#字符串
    (7)C#流程控制
    (6)C#方法,作用域,方法重载
    (5)C#运算符
    各个品牌主板快速开机启动
    口袋的天空
    繁忙的都市
    取水
  • 原文地址:https://www.cnblogs.com/helloworld2019/p/10475591.html
Copyright © 2011-2022 走看看