您的位置:首页 > 其它

数组中数字的所有组合情况

2015-03-05 13:34 169 查看
#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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数组 数字 组合