64,637
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <vector>
typedef std::vector<int> IntVec;
typedef std::vector<IntVec> IntVecVec;
void PrintAllCombi(const IntVecVec &data)
{
if (data.empty())
{
return;
}
IntVec flag;
flag.resize(data.size(), 0);
while (true)
{
for (int i = (int)data.size() - 1; i >= 0; --i)
{
if (flag[i] < (int)data[i].size())
{
break;
}
if (flag[0] >= (int)data[0].size())
{
return;
}
flag[i] = 0;
++flag[i - 1];
}
for (int i = 0; i < (int)data.size(); ++i)
{
printf("%d ", data[i][flag[i]]);
}
printf("\n");
++flag[data.size() - 1];
}
}
int main()
{
IntVec a;
a.push_back(1);
a.push_back(2);
a.push_back(3);
IntVec b;
b.push_back(4);
b.push_back(5);
IntVec c;
c.push_back(6);
c.push_back(7);
c.push_back(8);
c.push_back(9);
IntVecVec data;
data.push_back(a);
data.push_back(b);
data.push_back(c);
PrintAllCombi(data);
return 0;
}