C++递归地生成集合的排列

标签 c++ algorithm recursion

我被分配了编写一个 C++ 函数的任务,该函数返回 一组整数的所有可能排列。我做了一些研究,但我发现的所有算法都显示了正在打印的排列。

我遇到的问题是我不知道如何设置函数,具体来说,我应该如何处理从递归调用接收数据。我的第一个猜测是使用链表,但我知道如果我尝试返回一个指向节点的指针,我最终会得到一个指向无效内存的指针。

我的另一个猜测是使用某种全局 vector 链表,但我无法想象如何从函数本身添加到链表。此外,这是在回避问题而不是实际解决问题,如果可能的话,我想实际解决它。

由于这是一道家庭作业题,我不希望有人直接给我答案。我只是迷路了,非常感谢有人为我指明正确的方向。

最佳答案

你可以使用 std::next_permutation .它对数据结构进行操作,因此您可以在每次迭代后对数据结构做任何您想做的事情。

如果您正在实现自己的排列逻辑,假设您正在对 vector<int>& data 进行操作,您可以添加一个参数,例如 vector<vector<int> >& result在你的递归函数中。每次生成排列时,您可以简单地执行 result.push_back(data) .

关于C++递归地生成集合的排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23065082/

相关文章:

c++ - 从未命名的 QGraphicsTextItem 中获取文本

c++ - 用常数双指数优化幂和

java - 检查 if 语句中所有条件的最有效方法?

c# - 将调整大小算法分成两遍

java - 在 Java 中重复排列数组

Python递归函数显示给定集合的所有子集

递归计数直到某个数字递减并备份

C++ 概念循环

c++ - 捕获输入和输出文件的异常

java - 使用 BFS 搜索表示 Java 中的 Word Chain 问题的图形