c++动态数组全排列
时间: 2023-10-23 11:13:55 浏览: 96
动态数组的全排列可以使用递归算法来实现。首先,我们需要定义一个函数,该函数接受一个动态数组和一个位置参数,用于确定当前位置。然后,我们需要定义一个处理结果的回调函数,该函数将在每次排列完成后被调用。在主函数中,我们初始化一个动态数组,并调用排列函数。下面是一个示例代码:
```c++
#include <vector>
#include <functional>
#include <iostream>
using namespace std;
constexpr int empty_val = -1;
void Permutation_List(vector<int> &array, int pos, function<void(const vector<int> &x)> &foo) {
if (pos == array.size()) {
foo(array);
}
std::vector<bool> used_list(array.size(), false);
for (int i = 0; i < pos; i++) {
int v = array[i];
used_list[v] = true;
}
std::vector<int> remain_list;
remain_list.reserve(array.size());
for (int i = 0; i < used_list.size(); i++) {
if (used_list[i] == false)
remain_list.push_back(i);
}
for (auto x : remain_list) {
array[pos] = x;
Permutation_List(array, pos + 1, foo);
array[pos] = empty_val;
}
}
int main() {
vector<int> array(5, -1);
function<void(const vector<int> &x)> foo = [](const vector<int> &x) {
for (int v : x) {
std::cout << v << " ";
}
std::cout << std::endl;
};
Permutation_List(array, 0, foo);
}
```
阅读全文