无递归的置换
Permutation without recursion?
本文关键字:递归 更新时间:2023-10-16
我试图使用for循环来代替我通常使用的递归,但我发现它比我想象的要困难。有人能告诉我怎么做吗?谢谢!
例如,给定向量2,1,3。应该有六种排列:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
vector<int> simple;
simple.push_back(2);
simple.push_back(1);
simple.push_back(3);
编辑:将顺序从1 2 3改为随机顺序2 1 3
我猜你是在找std::next_permutation()
:
#include <iostream>
#include <algorithm>
#include <vector>
int main()
{
std::vector<int> simple{1, 2, 3};
do
{
for (auto e : simple) { std::cout << e << " "; }
std::cout << std::endl;
}
while (next_permutation(simple.begin(), simple.end()));
}
下面是一个实例。
如果您不想从排序向量开始,您可以按以下方式使用std::next_permutation()
:
#include <iostream>
#include <algorithm>
#include <vector>
constexpr int factorial(int i)
{
return i == 0 ? 1 : i * factorial(i-1);
}
int main()
{
std::vector<int> simple{3, 1, 2};
for (int i = 0; i < factorial(simple.size()); i++)
{
std::next_permutation(simple.begin(), simple.end());
for (auto e : simple) { std::cout << e << " "; }
std::cout << std::endl;
}
}
下面是一个实例。
请注意,如果向量的大小在编译时是已知的,就像您的示例中所示,您可以使用std::array
而不是std::vector
,如本实例所示。
相关文章:
- 通过递归进行因子分解
- 递归函数计算序列中的平方和(并输出过程)
- 使用递归的数组的最小值.这是怎么回事
- 递归列出所有目录中的C++与Python与Ruby的性能
- 递归计数给定目录的文件和所有目录
- 如何在BST的这个简单递归实现中消除警告
- C++:正在检查LinkedList中的回文-递归方法-错误
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 递归无序映射
- TSP递归解的迭代形式
- 如何在Elixir中调用递归函数并行
- 返回递归调用和仅递归调用的区别
- 数组元素打印的递归方法
- 使用递归时获取变量的奇怪值
- 如何在C++中递归地按相反顺序打印集合
- 到连接组件算法的问题(递归)
- 如何使用递归打印修改后的星号三角形图案
- 使用递归模板动态分配的多维数组
- 递归函数有效,但无法记忆
- 包含模板文件的递归会导致编译失败