天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 58|回复: 0

Combination求全组合

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
//求长度为number的组合
/*
  参数:
  v:基础元素集合
  cur_v:当前递归过程中的中间组合变量
  cur_index:当前递归处理到v中第几个元素了
  number:要求的组合的长度值
  result:用于保存组合结果
*/
template<class T>
void Combination_n(const vector<T>& v, vector<T>& cur_v, int cur_index, int number, vector<vector<T>>& result) {

    if (number == 0) {
        result.push_back(cur_v);
        return;
    }

    if (cur_index >= v.size()) {
        return;
    }

    cur_v.push_back(v[cur_index]);
    Combination_n(v, cur_v, cur_index + 1, number - 1, result);
    cur_v.pop_back();
    Combination_n(v, cur_v, cur_index + 1, number, result);
}

//求全组合,对于长度为n的v,组合的种类数一共有2^n-1种
/*
  参数:
  v是基础元素集合
  result用于保存所有组合结果
*/
template<class T>
void Combination(const vector<T>& v, const int &num,vector<vector<T>>& result)
{
    if (v.empty()) {
        return;
    }
    else if (v.size() == 1) {
        result.push_back(v);
        return;
    }

    //求不同长度的组合
    vector<int> temp_v;
    for (int i = num; i <= v.size(); ++i) {
        Combination_n(v, temp_v, 0, i, result);
    }

}

 

 

 

 

Combination求全组合
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

GMT+8, 2024-11-1 11:27 , Processed in 0.161697 second(s), 28 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表