您的位置:首页 > 其它

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

2013-06-23 02:18 134 查看
从每组中依次选择一个元素

假设有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;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐