zoukankan      html  css  js  c++  java
  • 全排列的实现

    编程思路如下(截取自《Erlang程序设计》3.8):

    调试的代码:

    View Code
    #include <cstdlib>
    #include <iostream>
    #include <vector>
    using namespace std;
    
    void insert(string &str,char ch, vector<string>& aa)
    {
        int n=str.length();
        for (int i=0; i<=n; i++)
        {
            string t_str = str;
            t_str.insert(i,1,ch);
            aa.push_back(t_str);
        }
    }
    void fun(string array, vector<string>& a)
    {
        int n = array.length();
        if (n==2)
        {
            string str1 = array;
            string str2 = array.substr(1,1)+array.substr(0,1);
            a.push_back(str1);
            a.push_back(str2);
            return;
        }
        string array2 = array.substr(1,n-1);
    //    cout << "array2=" << array2<<endl;
        vector<string> aa;
        char ch = array[0];
        fun(array2,a);
    //    cout << "a.size()=" << a.size() << endl;
        n = a.size();
        for (int i=0; i<n; i++)
        {
    //        cout << "a[" <<i<<"]="<< a[i] << endl;
            insert(a[i],ch,aa);
    /*        for (int i=0; i<aa.size();i++)
            {
                cout <<"aa["<<i<<"]="<< aa[i]<< endl;
            }
    */
        }
        a.resize(aa.size());
        copy(aa.begin(),aa.end(),a.begin());
    }
    
    int main(int argc, char *argv[])
    {
        string str;
        cout << "----全排列-----" << endl;
        cout <<"退出请输入:exit"<<endl; 
        cout << "请输入待排列的序列(如:abc):";
        cin>>str;
        while (str!="exit")
        {
            vector<string> v_str;
            fun(str,v_str);
            int size = v_str.size();
            for (int i=0; i<size; i++)
            {
                cout <<"v_str["<<i<<"]="<< v_str[i]<< endl;
            }
            cout <<"退出请输入:exit"<<endl; 
            cout << "请输入待排列的序列(如:abc):";
            cin>>str;
        }
        system("PAUSE");
        return EXIT_SUCCESS;
    }

    正式代码:

    #include <cstdlib>
    #include <iostream>
    #include <vector>
    using namespace std;
    
    void insert(string &str,char ch, vector<string>& aa)
    {
        int n=str.length();
        for (int i=0; i<=n; i++)
        {
            string t_str = str;
            t_str.insert(i,1,ch);
            aa.push_back(t_str);
        }
    }
    void fun(string array, vector<string>& a)
    {
        int n = array.length();
        if (n==2)
        {
            string str1 = array;
            string str2 = array.substr(1,1)+array.substr(0,1);
            a.push_back(str1);
            a.push_back(str2);
            return;
        }
        string array2 = array.substr(1,n-1);
        vector<string> aa;
        char ch = array[0];
        fun(array2,a);
        n = a.size();
        for (int i=0; i<n; i++)
        {
            insert(a[i],ch,aa);
        }
        a.resize(aa.size());
        copy(aa.begin(),aa.end(),a.begin());
    }
    
    int main(int argc, char *argv[])
    {
        string str;
        cout << "----全排列-----" << endl;
        cout <<"退出请输入:exit"<<endl; 
        cout << "请输入待排列的序列(如:abc):";
        cin>>str;
        while (str!="exit")
        {
            vector<string> v_str;
            fun(str,v_str);
            int size = v_str.size();
            for (int i=0; i<size; i++)
            {
                cout <<"v_str["<<i<<"]="<< v_str[i]<< endl;
            }
            cout <<"退出请输入:exit"<<endl; 
            cout << "请输入待排列的序列(如:abc):";
            cin>>str;
        }
        system("PAUSE");
        return EXIT_SUCCESS;
    }
  • 相关阅读:
    浮点数如何存储与表示(精度问题)
    快速幂详解(幂运算与矩阵)
    斐波那契数列的四种解法(头递归、尾递归、迭代与矩阵快速幂)
    机器码与位运算
    pytorch中参数dim的含义(正负,零,不传)
    查看显卡名称 pytorch
    使用国内源快速下载Python包(以matplotlib为例)
    基于Attention的机器翻译模型(Visualizing A Neural Machine Translation Model)
    GNU Parallel-安装+使用
    统计文件个数、删除空文件等Linux命令
  • 原文地址:https://www.cnblogs.com/hanxi/p/2502606.html
Copyright © 2011-2022 走看看