EDITED FOR UPDATE
我们需要不是逐一更新每个指令,通过迭代组合来更新...
请参阅:How can I iterate throught every possible combination of n playing cards
所以现在它看起来像这样
#include <iostream>
#include <vector>
#include <string>
using namespace std;
bool UpdateCombination (std::vector<int> &comboindices, int count, int n)
{
for (int i = 1; i <= n; ++i)
{
if (comboindices[n - i] < count - i)
{
++comboindices[n - i];
for (int j = n - i + 1; j < n; ++j)
{
comboindices[j] = comboindices[j-1] + 1;
}
return false;
}
}
return true;
}
void ResetCombination (std::vector<int> &comboindices, int n)
{
comboindices.resize(n);
for (int i = 0; i < n; ++i)
{
comboindices[i] = i;
}
}
void PrintArrays (const std::vector<std::vector<std::string>> items, int count)
{
std::vector<std::vector<int>> indices;
int n = items.size();
indices.resize(items.size());
for(auto i = indices.begin(); i != indices.end(); ++i)
{
ResetCombination((*i),count);
}
while (true) //Iterate until we've used all of the last array of items
{
for (int i = 0; i < n; ++i)
{
cout << "{";
for (auto j = indices[i].begin(); j != indices[i].end(); ++j)
{
int ji = (*j);
cout << (items[i])[ji] << " ";
}
cout << "} ";
}
cout << endl;
//Update to the next indice
for (int i = n - 1; i >= 0; --i)
{
bool done = UpdateCombination (indices[i],items[i].size(),count);
if (!done)
{
break;
}
else if (done && i == 0)
{
return; //Escape.
}
else
{
ResetCombination(indices[i],count);
}
}
}
}
//{A,B,C,D},{A,B},{A,B},{A,B,C,D,E,F},{A,B}
int main() {
vector<vector<string>> lists;
lists.resize(5);
lists[0].push_back("A");
lists[0].push_back("B");
lists[0].push_back("C");
lists[0].push_back("D");
lists[1].push_back("A");
lists[1].push_back("B");
lists[2].push_back("A");
lists[2].push_back("B");
lists[3].push_back("A");
lists[3].push_back("B");
lists[3].push_back("C");
lists[3].push_back("D");
lists[3].push_back("E");
lists[3].push_back("F");
lists[4].push_back("A");
lists[4].push_back("B");
PrintArrays(lists,2);
int pause;
cin >> pause;
return 0;
}
给予我们...
{A B } {A B } {A B } {A B } {A B }
{A B } {A B } {A B } {A C } {A B }
{A B } {A B } {A B } {A D } {A B }
{A B } {A B } {A B } {A E } {A B }
{A B } {A B } {A B } {A F } {A B }
{A B } {A B } {A B } {B C } {A B }
{A B } {A B } {A B } {B D } {A B }
{A B } {A B } {A B } {B E } {A B }
{A B } {A B } {A B } {B F } {A B }
{A B } {A B } {A B } {C D } {A B }
{A B } {A B } {A B } {C E } {A B }
{A B } {A B } {A B } {C F } {A B }
{A B } {A B } {A B } {D E } {A B }
{A B } {A B } {A B } {D F } {A B }
{A B } {A B } {A B } {E F } {A B }
{A C } {A B } {A B } {A B } {A B }
{A C } {A B } {A B } {A C } {A B }
{A C } {A B } {A B } {A D } {A B }
{A C } {A B } {A B } {A E } {A B }
{A C } {A B } {A B } {A F } {A B }
{A C } {A B } {A B } {B C } {A B }
{A C } {A B } {A B } {B D } {A B }
{A C } {A B } {A B } {B E } {A B }
{A C } {A B } {A B } {B F } {A B }
{A C } {A B } {A B } {C D } {A B }
{A C } {A B } {A B } {C E } {A B }
{A C } {A B } {A B } {C F } {A B }
{A C } {A B } {A B } {D E } {A B }
{A C } {A B } {A B } {D F } {A B }
{A C } {A B } {A B } {E F } {A B }
{A D } {A B } {A B } {A B } {A B }
{A D } {A B } {A B } {A C } {A B }
{A D } {A B } {A B } {A D } {A B }
{A D } {A B } {A B } {A E } {A B }
{A D } {A B } {A B } {A F } {A B }
{A D } {A B } {A B } {B C } {A B }
{A D } {A B } {A B } {B D } {A B }
{A D } {A B } {A B } {B E } {A B }
{A D } {A B } {A B } {B F } {A B }
{A D } {A B } {A B } {C D } {A B }
{A D } {A B } {A B } {C E } {A B }
{A D } {A B } {A B } {C F } {A B }
{A D } {A B } {A B } {D E } {A B }
{A D } {A B } {A B } {D F } {A B }
{A D } {A B } {A B } {E F } {A B }
{B C } {A B } {A B } {A B } {A B }
{B C } {A B } {A B } {A C } {A B }
{B C } {A B } {A B } {A D } {A B }
{B C } {A B } {A B } {A E } {A B }
{B C } {A B } {A B } {A F } {A B }
{B C } {A B } {A B } {B C } {A B }
{B C } {A B } {A B } {B D } {A B }
{B C } {A B } {A B } {B E } {A B }
{B C } {A B } {A B } {B F } {A B }
{B C } {A B } {A B } {C D } {A B }
{B C } {A B } {A B } {C E } {A B }
{B C } {A B } {A B } {C F } {A B }
{B C } {A B } {A B } {D E } {A B }
{B C } {A B } {A B } {D F } {A B }
{B C } {A B } {A B } {E F } {A B }
{B D } {A B } {A B } {A B } {A B }
{B D } {A B } {A B } {A C } {A B }
{B D } {A B } {A B } {A D } {A B }
{B D } {A B } {A B } {A E } {A B }
{B D } {A B } {A B } {A F } {A B }
{B D } {A B } {A B } {B C } {A B }
{B D } {A B } {A B } {B D } {A B }
{B D } {A B } {A B } {B E } {A B }
{B D } {A B } {A B } {B F } {A B }
{B D } {A B } {A B } {C D } {A B }
{B D } {A B } {A B } {C E } {A B }
{B D } {A B } {A B } {C F } {A B }
{B D } {A B } {A B } {D E } {A B }
{B D } {A B } {A B } {D F } {A B }
{B D } {A B } {A B } {E F } {A B }
{C D } {A B } {A B } {A B } {A B }
{C D } {A B } {A B } {A C } {A B }
{C D } {A B } {A B } {A D } {A B }
{C D } {A B } {A B } {A E } {A B }
{C D } {A B } {A B } {A F } {A B }
{C D } {A B } {A B } {B C } {A B }
{C D } {A B } {A B } {B D } {A B }
{C D } {A B } {A B } {B E } {A B }
{C D } {A B } {A B } {B F } {A B }
{C D } {A B } {A B } {C D } {A B }
{C D } {A B } {A B } {C E } {A B }
{C D } {A B } {A B } {C F } {A B }
{C D } {A B } {A B } {D E } {A B }
{C D } {A B } {A B } {D F } {A B }
{C D } {A B } {A B } {E F } {A B }
检出输出。 http://ideone.com/L5AZVv
老ideone链接: http://ideone.com/58ARAZ
注意:这是一个基本的C++类,所以我需要使用这个基本的方法,而不是向量或任何东西 – Foxic 2013-04-17 20:45:26
[几个向量的笛卡尔积]的副本(http://stackoverflow.com/questions/2405242/笛卡尔积的-几个矢量)。 – 2013-04-17 21:59:52
正如我所说的,我需要一个不使用向量的基本方法,所以这个问题不会帮助我 – Foxic 2013-04-18 02:21:58