从每组中依次选择一个元素
从每组中依次选择一个元素
假设有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; }
(完)
文档信息
·版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0
·博客地址:http://www.cnblogs.com/unixfy
·博客作者:unixfy
·作者邮箱:goonyangxiaofang(AT)163.com
·如果你觉得本博文的内容对你有价值,欢迎对博主 小额赞助支持