如何使用 stl 进行排列组合?
#include <iostream>
#include <vector>
#include <algorithm>
//从 indexs 集合中选择 num 个元素进行组合并保证返回的组合中没有重复的元素
std::vector<std::vector<int>> combination(const int num,std::vector<int> &indexs)
{
std::vector<std::vector<int>> set;
if (num > indexs.size())return set;
std::vector<int> elements;
elements.resize(indexs.size());
for (int i = 0; i < num; i++)
{
elements.at(i) = 1;
}
do
{
std::vector<int> currentCombination;
for (size_t i = 0; i < elements.size(); ++i)
{
if (elements[i])
{
currentCombination.push_back(indexs[i]);
}
}
set.push_back(currentCombination);
} while (prev_permutation(elements.begin(), elements.end()));
//std::cout << set.size() << std::endl;
return set;
}
std::ostream& operator<<(std::ostream& os, const std::vector<std::vector<int>>& data)
{
for (int i = 0;i < data.size();i++)
{
os << i << ": ";
for (int j = 0;j < data[i].size();j++)
{
os << data[i][j] << ",";
}
os << "\n";
}
return os;
}
inline unsigned int factorial(unsigned int value)
{
unsigned int local_value = value;
while (value-- > 1)
{
local_value *= value;
}
return local_value;
}
unsigned int combination(unsigned int k,unsigned int n)
{
if (k > n)
{
return 0;
}
return factorial(n)/ (factorial(k)*factorial(n - k));
}
int main()
{
std::vector<int> indexs = { 1,2,3,4,5,6,7,8,9 };
const int num = 4;
std::cout << combination(num, indexs) << std::endl;
getchar();
return 0;
}
如何使用 stl 进行排列组合?的更多相关文章
- 对N各集合中的任意元素进行排列组合问题
小李去市场买菜,有蔬菜(茄子.黄瓜.大白菜...等k中素菜),和肉类(牛肉,羊肉,鸡肉...等m种荤菜),及点心(麻饼,桃酥,枣花...等n中点心),现在老婆要求每天一荤一素一点心 并且每天的样式要尽 ...
- 【python 3.6】使用itertools.product进行排列组合
#python 3.6 #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'BH8ANK' import itertools colo ...
- STL学习小结
STL就是Standard Template Library,标准模板库.这可能是一个历史上最令人兴奋的工具的最无聊的术语.从根本上说,STL是一些"容器"的集合,这些" ...
- C++写一个排列组合小程序
今天突然想到一个问题,有时候,针对同一个事件有多种反映,特别是游戏AI当中,这种情况下需要采取最适合的方案,哪种方案最适合,可以将每种方案的结果或影响都计算一遍,从而选择最合适的.最基本就是一个排列组 ...
- 排列组合函数next_permutation()
next_permution(),按照字典序进行排列组合, 括号里的参数为类似sort里面的参数,用法相同 #include <bits/stdc++.h> using namespace ...
- STL学习总结
STL就是Standard Template Library,标准模板库.这可能是一个历史上最令人兴奋的工具的最无聊的术语.从根本上说,STL是一些"容器"的集合.这些" ...
- 【Python】排列组合itertools & 集合set
■itertools 利用python的itertools可以轻松地进行排列组合运算 itertools的方法基本上都返回迭代器 比如 •itertools.combinations('abcd',2 ...
- <经验杂谈>介绍Js简单的递归排列组合
最近在开发SKU模块的时候,遇到这样一个需求,某种商品有N(用未知数N来表示是因为规格的数组由用户制定且随时可以编辑的,所以对程序来说,它是一个未知数)类规格,每一类规格又有M个规格值,各种规格值的组 ...
- 数字货币量化教程——使用itertools实现各种排列组合
在量化数据处理中,经常使用itertools来完成数据的各种排列组合以寻找最优参数 一.数据准备 import itertools items = [1, 2, 3] ab = ['a', 'b'] ...
随机推荐
- [1-5] 把时间当做朋友(李笑来)Chapter 5 【小心所谓成功学】 摘录
有一个事实非常简单,却令人难以接受.这世界上所有的资源并非平均分布在每一个人的身上,能够比较接近地表示这种分布情况的数学曲线叫做“正态分布曲线”(Normal Distribution Curve) ...
- xml文件的增删改读
最近学习了利用XmlDocument对象对xml进行增删改读操作,就写了一个小的例子记录下来,加深印象,以后忘了也可以找出来看看. xml文件: <?xml version="1.0& ...
- oc block 遍历数组及字典
原遍历数组NSArray * lines = ...for (NSString * line in lines) { // ...}for (int i = 0; i < lines.count ...
- JSON.parse 函数
JSON.parse 函数 JavaScript JSON.parse 函数 (JavaScript) 将 JavaScript 对象表示法 (JSON) 字符串转换为对象. JSON.parse(t ...
- Scala 机器学习库
自然语言处理 ScalaNLP-机器学习和数值计算库的套装 Breeze -Scala用的数值处理库 Chalk-自然语言处理库. FACTORIE-可部署的概率建模工具包.用Scala实现的软件库. ...
- usb转串口模块下载时遇到的问题
ch340g usb转TTL模块,烧写wifi模块ESP8266固件时,为图省事,我直接用的该模块的3.3v电为wifi模块供的电,结果刚一上电就出现串口模块消失(听到噔的一声),电脑设备管理器里就看 ...
- Centos使用光盘作为本地yum源
[root@localhost CentOS]# mkdir /media/CentOS把光盘加载到本地[root@localhost CentOS]# mount /dev/cdrom /media ...
- CSS3 :nth-child()伪类选择器
CSS3 :nth-child()伪类选择器 CSS3的强大,让人惊叹,人们在惊喜之余,又不得不为其艰难的道路感到可惜:好 的标准只有得到行业浏览器的良好支持才算得上“标准”.CSS3标 准已提出数年 ...
- Creating Dialogbased Windows Application (4) / 创建基于对话框的Windows应用程序(四)Edit Control、Combo Box的应用、Unicode转ANSI、Open File Dialog、文件读取、可变参数、文本框自动滚动 / VC++, Windows
创建基于对话框的Windows应用程序(四)—— Edit Control.Combo Box的应用.Unicode转ANSI.Open File Dialog.文件读取.可变参数.自动滚动 之前的介 ...
- 383. Ransom Note【easy】
383. Ransom Note[easy] Given an arbitrary ransom note string and another string containing letters f ...