实现组合算法

来源:互联网 发布:三维激光扫描数据 编辑:程序博客网 时间:2024/06/05 07:08
#include <stack>#include<iostream>#include<vector>using namespace std;void cho(vector<char>&r, vector<char>&a, int n1, int n2, int m, vector<vector<char>>&b){if ((n2 - n1 + 1) < m)return;if (n2 - n1 + 1 == m){for (int i = n1; i <= n2; i++)r.push_back(a[i]);b.push_back(r);for (int i = n1; i <= n2; i++)r.pop_back();return;}if (m == 1){for (int i = n1; i <=n2; i++){r.push_back(a[i]);b.push_back(r);r.pop_back();}return;}r.push_back(a[n1]);cho(r, a, n1 + 1, n2, m - 1, b);r.pop_back();cho(r, a, n1 + 1, n2, m, b);}int main( ){vector<char>a;a.push_back('a');a.push_back('b');a.push_back('c');a.push_back('d');vector<vector<char>>b;vector<char>r;cho(r,a, 0,3, 3,b);for (vector<vector<char>>::iterator it = b.begin(); it != b.end(); it++){for (vector<char>::iterator itt = (*it).begin(); itt != (*it).end(); itt++){cout << *itt << "  ";}cout << endl;}system("pause");return 0;}