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

来源:互联网 发布:java算圆周率 编辑:程序博客网 时间:2024/04/29 15:44
#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]

0 0