全排列(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);
}

posted @   bakul  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示