全排列(dfs)
问题 X: 【递归】n个数的全排列
时间限制: 1.000 Sec 内存限制: 32 MB
题目描述
从键盘读入n个整数(每个数都是1~9之间的数),输出这n个整数的全排列(数字不能重复)。
输入
第1行输入一个整数n(1<=n<=8)
第2行输入n个不相等的整数(1<=每个数<=9)。
输出
输出若干行,每行包括n个数据,表示一种排列方案,所有的排列按字典码从小到大排序输出。
样例输入 Copy
2 4 6```
## 样例输出 Copy
```2 4 6
2 6 4
4 2 6
4 6 2
6 2 4
6 4 2```
## 题解
```cpp
#include <bits/stdc++.h>
using namespace std;
vector<bool> vis(10,false);
vector<int> ans(15,0);//记录
void dfs(int n,vector<int> &v,int k)
{
if(k == n)//结束标志
{
for(int i = 0;i < n;++i)
cout << ans[i] << ' ';
cout << endl;
return;
}
for(int i = 0;i < n;++i)
{
if(vis[i]) continue;
vis[i] = true;
ans[k] = v[i];
dfs(n,v,k + 1);//传入k+1,而不是k++,这样k+1就是局部变量,这样不用回溯的时候k--
vis[i] = false;//回溯
}
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
//
// freopen("E:/Code/C++/untitled1/input.txt","r",stdin);
// freopen("output.txt","w",stdout);
int n;
cin >> n;
vector<int> v(n);
f(i,0,n) cin >> v[i];
sort(v.begin(),v.end());//这样直接就是字典序
dfs(n,v,0);
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战