编写一个求全排列的函数,要求输入n和m两个参数,其中1<n<10,0<m≤n,从1~n 中随机选取m个数字进行全排列,按照字典序输出,每种排列占一行。(C++)
时间: 2024-02-23 10:00:02 浏览: 73
好的,以下是一个C++的全排列函数,使用了STL库中的`next_permutation`函数:
```c++
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
void permutation(int n, int m) {
vector<int> nums(n);
for (int i = 0; i < n; i++) {
nums[i] = i + 1;
}
vector<int> indices(m, 1);
for (int i = 0; i < m; i++) {
indices[i] = 0;
}
do {
vector<int> perm(m);
int j = 0;
for (int i = 0; i < n; i++) {
if (indices[i] == 0) {
perm[j++] = nums[i];
}
}
do {
for (int i = 0; i < m; i++) {
cout << perm[i] << " ";
}
cout << endl;
} while (next_permutation(perm.begin(), perm.end()));
} while (next_permutation(indices.begin(), indices.end()));
}
int main() {
int n, m;
cin >> n >> m;
permutation(n, m);
return 0;
}
```
这个函数使用了两个vector,一个存储1~n,另一个存储选中的数字的下标(0表示选中)。首先生成所有可能的下标组合,然后根据下标组合生成对应的排列,并使用`next_permutation`函数生成该排列的全排列。最后输出所有排列。
您只需在`main`函数中输入n和m,然后调用`permutation`函数即可得到结果。
阅读全文