zoukankan      html  css  js  c++  java
  • 从每组中依次选择一个元素

    从每组中依次选择一个元素

             假设有N组元素,从N组中依次选取一个元素组成一个序列。假如N组元素的个数依次为A1,A2,…,AN,那么得到的序列数应该为A1*A2*…*AN。

             下面我们关注的是如何生成A1*A2*…*AN个序列。由于N是个变量,如果是用N个循环实现,只能针对特定的N个组的情况。并且如果N很大时,实现起来不现实。

             这里我们采用递归的方法来实现。

    // 递归实现
    #include <iostream>
    #include <vector>
    #include <string>
    using namespace std;
    
    void foo(const vector<vector<string> >& src, int x, int n, int& total, vector<vector<string> >& obj, vector<string>& hod)
    {
        for (vector<string>::size_type i = 0; i != src[x-1].size(); ++i)
        {
            if (x == n)
            {
                hod.push_back(src[x-1][i]);
                ++total;
                obj.push_back(hod);
                hod.pop_back();
            }
            else
            {
                hod.push_back(src[x-1][i]);
                foo(src, x+1, n, total, obj, hod);
                hod.pop_back();
            }
        }
    }
    
    int main()
    {
        vector<vector<string> > src;
        vector<string> tmp;
        tmp.push_back("a");
        tmp.push_back("b");
        tmp.push_back("c");
        src.push_back(tmp);
        tmp.clear();
        tmp.push_back("h");
        tmp.push_back("i");
        tmp.push_back("j");
        src.push_back(tmp);
        tmp.clear();
        tmp.push_back("s");
        tmp.push_back("t");
        tmp.push_back("u");
        tmp.push_back("v");
        src.push_back(tmp);
        tmp.clear();
        tmp.push_back("x");
        tmp.push_back("y");
        tmp.push_back("z");
        src.push_back(tmp);
        tmp.clear();
        
        int total = 0;
        vector<vector<string> > obj;
        vector<string> hod;
        
        foo(src, 1, src.size(), total, obj, hod);
        
        for (vector<vector<string> >::size_type i = 0; i != obj.size(); ++i)
        {
            for (vector<string>::size_type j = 0; j != obj[i].size(); ++j)
            {
                cout << obj[i][j] << ' ';
            }
            cout << endl;
        }
        
        cout << total << endl;
        cout << obj.size() << endl;
        cout << hod.size() << endl;
        
        system("PAUSE");
        return 0;    
    }

  • 相关阅读:
    4.变量以及类型
    3.注释
    2.第一个python程序
    1.认识Python
    DB安装
    DB2<RedHed Linux> 创建数据库
    win 7设置主机域名
    FTP 错误1
    FTP 其他设置
    VM浏览器不能访问
  • 原文地址:https://www.cnblogs.com/unixfy/p/3150572.html
Copyright © 2011-2022 走看看