zoukankan      html  css  js  c++  java
  • 全排列程序

    排列:一些元素按某种顺序排成一列即为这些元素的一个排列。例如:由1,2,3,4,5组成一排列可以有12345,31254等。

    全排列:一些元素的所有可能的排列。例如:由a,b,c三个字母的全排列为abc,acb,bac,bca,cab,cba六个排列

    求全排列的问题可以用递归,也可以用非递归形式。

    /*功能:根据输入字符串列全排列
    说明1:所用字符为所有可见字符
    说明2:区分大小写
    说明3:所有字符不重复使用(输入字符串可以重复)
    说明4:全排列按字符顺序升序排列*/
    #include<iostream>
    #include<cstring>
    using namespace std;
    const int N=20;
    bool mak[N],m;
    int a[127],num[N],cnt,no,tmp; 
    char f[N];
    void pr()
    {
        cout<<++no<<':'; 
        for(int k=1;k<=cnt;k++)cout<<f[num[k]];
        cout<<endl; 
    }
    int main()
    {
        ios::sync_with_stdio(0);
        int i;
        string s;
        cin>>s;
        for(i=0;i<s.length() ;i++)a[s[i]]=1;
        for(i=33;i<127;i++)if(a[i])f[++cnt]=i;
        for(i=1;i<=cnt;i++)num[i]=i;
        pr();
        tmp=cnt;
        do
        {
            mak[num[tmp]]=true;
            for(i=num[tmp]+1;i<=cnt;i++)
                if(mak[i])
                {
                    num[tmp]=i,mak[i]=false;
                    break;
                }
            if(i>cnt)tmp--;
            else 
            {
                for(i=tmp+1;i<=cnt;i++)
                    for(int j=1;j<=cnt;j++)
                        if(mak[j])
                        {
                            num[i]=j,mak[j]=false;
                            break;
                        }
                pr();
                tmp=cnt;
            }
        }while(tmp);
        return 0;
    }
    #include<iostream>
    #include<cstring>
    using namespace std;
    int a[27],num[20],mk[20],cnt=0,x,js;
    char  f[20];
    void pr()
    {
        cout<<++js<<':';
        for(int i=1;i<=cnt;i++)cout<<f[num[i]];
        cout<<endl;
        return;
    }
    void dfs(int dp)
    {
        if(dp==cnt+1)pr();
        else
        for(int i=1;i<=cnt;i++)
        {
            if(mk[i]==0)
            {
                num[dp]=i,mk[i]=1;
                dfs(dp+1);
                mk[i]=0;
            }        
        }
    }
    int main()
    {
        ios::sync_with_stdio(0);
        char ch;
        string s; 
        cin>>s;
        for(int i=0;i<s.length() ;i++)
        {
            ch=s[i];
            if(ch>'Z')ch-=32;
            x=ch-'A'+1;
            a[x]=1;
        }
        for(int i=1;i<=26;i++)if(a[i])f[++cnt]=i+'A'-1;
        dfs(1);
        
        return 0;
    }
  • 相关阅读:
    PostGIS常用SQL
    PostGIS相关数据类型及内置函数介绍
    基于GeoTools做GeoJson,PostGIS,Shapefile的转换
    如何使用GeoTools
    JavaScript 循环
    jquery 层级选择器
    jquery 表单选择
    js 字符串操作
    js对象
    js函数 作用域 闭包 回调
  • 原文地址:https://www.cnblogs.com/wendcn/p/12381543.html
Copyright © 2011-2022 走看看