zoukankan      html  css  js  c++  java
  • 一个简单的问题 -全排列

    全排列一共分为两种情况,有重复元素和无重复元素,大一开始做的时候不会写,现在特意写一下这个问题的各种解法。

    1.无重复元素,这种相对简单一些,用递归就可以了

      首先找到第一个字母,然后找到剩余的字母中的第一个字母,依次类推,很简单,代码如下:

    //本来准备用dfs写,发现两个的复杂度是一样的,就没有必要了。

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;

    char str[10],ans[10];
    int n;

    void dfs(int cur)
    {
       if(cur==n)
       {
          for(int i=0;i<n;i++)
             putchar(ans[i]);
          putchar(' ');
       }
       else
       {
          for(int i=0;i<n;i++)
          {
             bool ok=1;
             for(int j=0;j<cur;j++)
                if(ans[j]==str[i])
                {
                   ok=0;
                   break;
                }
             if(ok)
             {
                ans[cur]=str[i];
                dfs(cur+1);
             }
          }
       }
    }

    int main()
    {
       while(~scanf("%s",str))
       {
          n=strlen(str);
          sort(str,str+n);
          dfs(0);
       }
       return 0;
    }

    2.现在介绍第二种,就是有重复元素的情况,例如abbc的排列

    先介绍一种简单的方法,stl中提供了一个全排列的函数,下面介绍一下,

    next_permutation是头文件algorithm中的一个函数,使用的时候必须引用这个头文件,下面是他的使用方法
    next_permutation(str+s,str+e);str是一个字符数组,str+n,表示数组需要排列开始的地方,str+e表示数组排列结束的地方,他的含义是这个序列内的字符按照字典序的大小产生下一个序列,代码如下:
    #include<iostream>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    
    int main()
    {
      char s[10],str[10];
      cin>>s;
      strcpy(str,s);
      int len=strlen(s);
      do{
          cout<<s<<endl;
      next_permutation(s,s+len);
      }while(strcmp(str,s));
      return 0;
    }

  • 相关阅读:
    SpringBoot整合NoSql--(四)Session共享
    SpringBoot整合NoSql--(三)Redis集群
    SpringBoot整合NoSql--(二)MongoDB
    SpringBoot整合NoSql--(一)Redis
    SpringBoot整合持久层技术--(三)Spring Data JPA
    ArcGIS Server 10.4切片图的制作与发布
    ArcGIS api for JavaScript 3.27 聚合(cluster)
    ArcGIS api for JavaScript 3.27 按需显示需要的图层
    ArcGIS api for JavaScript 3.27 在线浏览的一些小部件
    WebGIS小理论(持续更新)
  • 原文地址:https://www.cnblogs.com/jihe/p/4766997.html
Copyright © 2011-2022 走看看