• 递归实现排列型枚举


    递归实现排列型枚举

    题目描述

    把 1~n 这 n 个整数排成一行后随机打乱顺序,输出所有可能的次序。

    输入格式

    输入一个整数n。

    输出格式

    按照从小到大的顺序输出所有方案,每行1个。

    首先,同一行相邻两个数用一个空格隔开。

    其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面。

    数据范围

    1≤n≤9

    输入样例

    3
    

    输出样例

    1 2 3
    1 3 2
    2 1 3
    2 3 1
    3 1 2
    3 2 1
    

    题目思路

    用dfs递归的方式来进行不同的填数,st[i]=1表示选择这个数,used[i]=true表示这个数已经被使用过。

    一共有n!个dfs()分支,每个分支中都有一个时间复杂度为O(n)的循环。
    时间复杂度:O(n*n!)

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    
    using namespace std;
    
    const int N = 10;
    int n,st[N];
    bool used[N];
    
    void dfs(int u)
    {
        if(u > n)
        {
            for(int i=1;i<=n;i++)printf("%d ",st[i]);
            puts("");
            return ;
        }
        
        for(int i=1;i<=n;i++)
        {
            if(!used[i])
            {
                st[u] = i;
                used[i] = true;
                
                dfs(u+1);
                
                st[u] = 0;
                used[i] = false;
            }
        }
    }
    
    int main()
    {
        cin >> n;
        
        dfs(1);
        
        return 0;
    }
    
  • 相关阅读:
    userAgent判断当前设备类型
    h5+css3最简单的图片飞入以及淡入淡出效果
    ruby的form中常用的控件
    初识swipe.js
    后缀为7z的文件解码
    python all()函数
    flask web表单
    flask过滤器
    flask学习笔记1.21
    py学习笔记1.13、1.14
  • 原文地址:https://www.cnblogs.com/fsh001/p/14248797.html
Copyright © 2020-2023  润新知