输出全排列 (20 分)(dfs模板题)

简介: 输出全排列 (20 分)(dfs模板题)

请编写程序输出前n个正整数的全排列(n<10),并通过9个测试用例(即n从1到9)观察n逐步增大时程序的运行时间。


输入格式:

输入给出正整数n(<10)。


输出格式:

输出1到n的全排列。每种排列占一行,数字间无空格。排列的输出顺序为字典序,即序列a1,a2,⋯,an排在序列b1,b2,⋯,bn之前,如果存在k使得a1=b1,⋯,ak=bk 并且 ak+1<bk+1。


输入样例:

3

结尾无空行


输出样例:

1. 123
2. 132
3. 213
4. 231
5. 312
6. 321

结尾无空行


#include<iostream>
using namespace std;
int path[10],vis[10],n;
void dfs(int u)
{
    if(u>n)
    {
        for(int i=1;i<=n;i++) cout<<path[i];
        cout<<endl;
    }
    for(int i=1;i<=n;i++)
    {
        if(!vis[i])
        {
            path[u]=i;
            vis[i]=1;
            dfs(u+1);
            vis[i]=0;//恢复现场
        }
    }
}
int main()
{
    cin>>n;
    dfs(1);
    return 0;
}
目录
相关文章
|
7月前
PTA-求奇数分之一序列前N项和
求奇数分之一序列前N项和
99 0
复习C部分:1.for循环 2.do while循环语句 3.在一个有序数组中查找某个数,例如在1~10之间找7(例题包含计算n的阶乘+打印1~10的奇数+二分法)
复习C部分:1.for循环 2.do while循环语句 3.在一个有序数组中查找某个数,例如在1~10之间找7(例题包含计算n的阶乘+打印1~10的奇数+二分法)
120 0
复习C部分:1.for循环 2.do while循环语句 3.在一个有序数组中查找某个数,例如在1~10之间找7(例题包含计算n的阶乘+打印1~10的奇数+二分法)
|
算法
正整数n不同分解式的个数(DFS)
正整数n不同分解式的个数(DFS)
223 0
L2-013 红色警报 (25 分)(并查集)
L2-013 红色警报 (25 分)(并查集)
193 0
L2-010 排座位 (25 分)(并查集)
L2-010 排座位 (25 分)(并查集)
150 0
|
测试技术
7-177 输出全排列 (20 分)
7-177 输出全排列 (20 分)
107 0
7-3 输出最大公约数 (10 分)
7-3 输出最大公约数 (10 分)
124 0
7-57 愿天下有情人都是失散多年的兄妹 (25 分)(深搜)
7-57 愿天下有情人都是失散多年的兄妹 (25 分)(深搜)
143 0
7-2 输出约数 (9 分)
7-2 输出约数 (9 分)
116 0
7-4 输出最小公倍数 (9 分)
7-4 输出最小公倍数 (9 分)
100 0