给出 n 互不相同的数,输出它们的 n!个排列。按字典序从小到大输出这组数的全排列。两个排列在字典序的大小关系指,从第一个位置开始比较,遇到的第一个不相同的数时,较小的那个所在的排列字典序更小。
时间: 2024-02-19 19:57:15 浏览: 116
这是一个经典的全排列问题,可以使用递归的方式来解决。以下是一个基于 C++ 的实现代码:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void permute(vector<int>& nums, int start, vector<vector<int>>& result) {
if (start == nums.size() - 1) {
result.push_back(nums);
} else {
for (int i = start; i < nums.size(); i++) {
swap(nums[start], nums[i]);
permute(nums, start + 1, result);
swap(nums[start], nums[i]);
}
}
}
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int>> result;
permute(nums, 0, result);
sort(result.begin(), result.end());
return result;
}
int main() {
int n;
cin >> n;
vector<int> nums(n);
for (int i = 0; i < n; i++) {
cin >> nums[i];
}
vector<vector<int>> result = permute(nums);
for (auto& vec : result) {
for (int num : vec) {
cout << num << " ";
}
cout << endl;
}
return 0;
}
```
对于每个位置,我们可以将它和后面的位置交换,然后递归到下一层,直到最后一个位置。在递归回溯的过程中,需要还原交换的元素。
最后排序并输出即可。
阅读全文