zoukankan      html  css  js  c++  java
  • 递归实现排列型枚举

    题目描述

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

    输入

    一个整数n。

    输出

    按照从小到大的顺序输出所有方案,每行1个。 首先,同一行相邻两个数用一个空格隔开。其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面。

    样例输入

    3

    样例输出

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

    #include <iostream>
    #include <string>
    #include <cstdio>
    #include <cmath>
    #include <cstring>
    #include <algorithm>
    #include <vector>
    #include <queue>
    #include <map>
    #define range(i,a,b) for(int i=a;i<=b;++i)
    #define LL long long
    #define rerange(i,a,b) for(int i=a;i>=b;--i)
    #define fill(arr,tmp) memset(arr,tmp,sizeof(arr))
    using namespace std;
    int num[20],n;
    void init(){
        fill(num,0);
        cin>>n;
    }
    void solve(int n,int ans){
        if(ans==n)range(i,0,n-1)cout<<num[i]<<(i==n-1?'
    ':' ');
        else range(i,1,n){
            bool flag=true;
            range(j,0,ans-1)if(num[j]==i)flag=false;
            if(flag){
                num[ans]=i;
                solve(n,ans+1);
            }
        }
    }
    int main() {
        init();
        solve(n,0);
        return 0;
    }
    View Code
  • 相关阅读:
    C 字符串
    C 函数指针、回调函数
    C 指针
    C 数组、枚举类型enum
    C 函数声明、函数参数
    C 内置函数
    C 流程控制
    C 储存类与运算符
    C变量和常量
    名词解释
  • 原文地址:https://www.cnblogs.com/Rhythm-/p/9321246.html
Copyright © 2011-2022 走看看