#include <iostream>
#include <vector>
#include <algorithm>
// 组合枚举
// 初始化
std::vector<int> init_combination(int M)
{
std::vector<int> data;
for (auto i = 0; i < M; ++i)
data.push_back(i);
return data;
}
// 枚举
bool next_combination(std::vector<int>& data, int N)
{
if (data[0] + data.size() >= N)
{
return false;
}
for (auto i=0; i<data.size()-1; ++i)
{
if (data[i] + 1 < data[i + 1])
{
++data[i];
return true;
}
else
{
data[i] = i;
}
}
// 最高位
++data[data.size() - 1];
return true;
}
void combination_demo()
{
// 从5个中选3个
int data[] = { 100,200,300,400,500 };
auto cx = init_combination(3);
do
{
for (auto d : cx)
{
std::cout << data[d] << " ";
}
std::cout << std::endl;
} while (next_combination(cx, 5));
}
int main()
{
combination_demo();
return 0;
}
/* 程序输出
100 200 300
100 200 400
100 300 400
200 300 400
100 200 500
枚举遍历组合
最新推荐文章于 2024-05-15 11:02:15 发布
本文探讨了如何在C++中进行枚举遍历组合,包括使用全排列算法`std::next_permutation`和`std::prev_permutation`,以及结合bool数组实现组合的枚举。对于排列问题,可以通过先组合再全排列的方法解决。

最低0.47元/天 解锁文章
668

被折叠的 条评论
为什么被折叠?



