zoukankan      html  css  js  c++  java
  • 5972: 【递归入门】全排列

    题目描述

         排列与组合是常用的数学方法。 
    先给一个正整数 ( 1 < = n < = 10 ) 
    例如n=3,所有组合,并且按字典序输出: 
    1 2 3 
    1 3 2 
    2 1 3 
    2 3 1 
    3 1 2 
    3 2 1 

    输入

    输入一个整数n(  1<=n<=10)

    输出

    输出所有全排列

    每个全排列一行,相邻两个数用空格隔开(最后一个数后面没有空格)

    样例输入

    3
    

    样例输出

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

    这是对昨天学习《算法竞赛入门经典》的复习,应用了7.2.1生成1~n的排列 递归方法。
    #include<stdio.h>
    int a[1000],n;
    
    void Get_a(int n,int *a,int ans)
    {
        int flag,i,j;
        if( ans == n+1)
        {
            for(i = 1; i < n; i ++)
                printf("%d ",a[i]);
            printf("%d
    ",a[n]);
        }
        else
        {
            for(i = 1; i <= n; i ++)
            {
                flag = 1;
                for(j = 1; j < ans; j ++)
                    if(a[j] == i) flag = 0;
                if(flag)
                {
                    a[ans] = i;
                    Get_a(n,a,ans+1);    
                }    
            }
        }
        return;
    }
    int main()
    {
        while(scanf("%d",&n)!=EOF)
        {
            Get_a(n,a,1);
        }
        return 0;
    }
  • 相关阅读:
    CF359B Permutation
    CF859C Pie Rules
    Contest 156
    Contest 155
    Range Module
    python-环境
    Git 使用
    Contest 154
    生命是一种长期而持续的累积过程
    Contest 153
  • 原文地址:https://www.cnblogs.com/hellocheng/p/7435748.html
Copyright © 2011-2022 走看看