输入一个数,输出它的全排列c++
时间: 2023-08-11 19:40:43 浏览: 92
以下是输入一个数,输出它的全排列的代码(C++):
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void permute(vector<int>& nums, vector<int>& path, vector<bool>& used, vector<vector<int>>& res) {
if (path.size() == nums.size()) {
res.push_back(path);
return;
}
for (int i = 0; i < nums.size(); i++) {
if (!used[i]) {
used[i] = true;
path.push_back(nums[i]);
permute(nums, path, used, res);
path.pop_back();
used[i] = false;
}
}
}
int main() {
int num;
cout << "请输入一个数字:";
cin >> num;
vector<int> nums;
while (num > 0) {
nums.push_back(num % 10);
num /= 10;
}
reverse(nums.begin(), nums.end()); // 将数字从低位到高位存储
vector<int> path;
vector<bool> used(nums.size(), false);
vector<vector<int>> res;
permute(nums, path, used, res);
for (auto& row : res) {
for (auto& num : row) {
cout << num;
}
cout << endl;
}
return 0;
}
```
在`permute`函数中,我们使用回溯算法求解排列问题。`nums`为原始数字数组,`path`为当前已经生成的排列,`used`为标记数字是否已经被使用的数组,`res`为存储结果的列表。当`path`的长度等于`nums`的长度时,表示已经生成了一个排列,将其加入结果列表中。否则,枚举`nums`中的每个数字,如果该数字未被使用,将其加入`path`中,并递归处理下一个数字。最后,将数字从`path`中弹出,并将其标记为未使用,以回溯到上一层继续搜索其他分支。
在`main`函数中,我们首先使用`cin`获取用户输入的数字,并将其转化为数字数组。然后,调用`permute`函数求解全排列,并将结果输出即可。
例如,当用户输入数字`123`时,程序将输出以下结果:
```
123
132
213
231
312
321
```
阅读全文