#include <queue>
#include <vector>
#include <iostream>
using namespace std;
// 列出数字的所有组合情况
// 使用树的层次遍历
void Combination(int arr[], int len)
{
if(arr == NULL || len <= 0)
{
return;
}
queue<vector<int> > q;
// 第一层节点入队列
for(int i = 0; i < len; ++i)
{
vector<int> v;
v.push_back(i);
q.push(v);
}
while(!q.empty())
{
// 取出队头元素
const vector<int>& v = q.front();
// 将队头元素的子节点入队
for(int i = v.back() + 1; i < len; ++i)
{
vector<int> vChild(v);
vChild.push_back(i);
q.push(vChild);
}
// 打印队头节点
if(!v.empty())
{
cout << "[";
for(int i = 0; i < v.size(); ++i)
{
if(i > 0)
{
cout << ',';
}
cout << arr[v[i]];
}
cout << "]" << endl;
}
// 队头节点出队
q.pop();
}
}
int main(int argc, char* argv[])
{
int arr[] = {1, 2, 3};
Combination(arr, sizeof(arr) / sizeof(int));
return 0;
}
运行结果:
[1]
[2]
[3]
[1,2]
[1,3]
[2,3]
[1,2,3]