允许在此排列生成器中重复
Allow repetitions in this permutations generator
本文关键字:排列 更新时间:2023-10-16
我有以下排列生成器:
#include <iostream>
#include <string>
using std::string;
using std::cout;
void comb(string sofar, string rest, int n)
{
std::cout << "comb('" << sofar << "', '" << rest << "', " << n << ")n";
string substring;
if (n == 0)
cout << sofar << 'n';
else {
for (size_t i = 0; i < rest.length(); i++) {
substring = rest.substr(0, i) + rest.substr(i + 1, rest.length());
comb(sofar + rest[i], substring, n - 1);
}
}
}
int main()
{
comb("", "abcde", 3);
return 0;
}
如何调整它以允许重复元素?例如,选项"abcde"的排列可能允许如下所示的排列:
AAB
AAA
行政协调会
您可以使用以下内容进行cartesian_product
bool increase(const std::string& s, std::vector<std::size_t>& it)
{
for (std::size_t i = 0, size = it.size(); i != size; ++i) {
const std::size_t index = size - 1 - i;
++it[index];
if (it[index] >= s.size()) {
it[index] = 0;
} else {
return true;
}
}
return false;
}
void do_job(const std::string& s,
const std::vector<std::size_t>& it)
{
for (std::size_t i = 0; i != it.size(); ++i) {
std::cout << s[it[i]] << " ";
}
std::cout << std::endl;
}
void cartesian_product(const std::string& s, std::size_t n)
{
std::vector<std::size_t> it(n, 0u);
do {
do_job(s, it);
} while (increase(s, it));
}
演示
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么不;名字在地图上是按顺序排列的吗
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 按对象的特定方法按升序排列的C++优先级队列
- 找到具有最多子串栅栏的字符串排列
- 重新排列单线以形成闭合多边形?
- 在数组中输入 n 个整数的列表,并以类似于钟摆来回移动的方式排列它们. 输入-1 3 2 5 4,输出5 3 1 2 4
- 输入的 C++ 排列
- 公共/私有/受保护是否会更改内存中结构的排列?
- 如何在 C/C++ 中生成具有 n 组 5 个值(重复项)的所有可能排列的矩阵
- 在向量C++中排列奇数和偶数
- 如何进行排列?
- 矩阵行求和与 RowMajor 和 ColMajor 数据排列的奇怪性能差异
- 在 CPP 中打印具有重复项的选定长度字符的所有排列
- 如何在不使用 C++ 中的数组或函数的情况下查找 N 位数字的所有排列
- 调用参数排列不变函数 f(i++, i++)
- 以 C++ 为单位具有输出限制的排列
- 在C++中寻找排列和组合
- 在 std::map 中重新排列键
- 为什么我得到长度仅为 3 的字符串排列的输出?