• 1294 全排列——http://codevs.cn/problem/1294/


    第一部分:题目

    题目描述 Description

    给出一个n, 请输出n的所有全排列

    输入描述 Input Description

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

    输出描述 Output Description

    一共n!行,每行n个用空格隔开的数,表示n的一个全排列。并且按全排列的字典序输出。

    样例输入 Sample Input

    3

    样例输出 Sample Output

    1 2 3

    1 3 2

    2 1 3

    2 3 1

    3 1 2

    3 2 1

    第二部分:思路

    全排列:就是把1~n的所有排列打印出来。那么怎么得出这些排列呢?我使用一个数组take 来接收这些数的每一次排列,相当于“插入法”。当然在插入之前需要判断当前数字是否已在数组中,不在就插入。在就继续枚举。(这里建议一点就是:能先判断就先判断,不要先调用函数再进行判断,因为函数调用比较耗时。个人习惯,不喜勿喷。嘻嘻)

    第三部分:代码

    #include<stdio.h>
    int take[10],len=0;//接收当前排列的数组,以及数组长度 
    void permutation(int n)//排列函数 
    {
        int i,j,l;
        for(i=1;i<=n;i++)//从1~n枚举 
        {
            for(j=0;j<len;j++)//判断是否已经在数组中,不在就插入 
            {
                if(i==take[j])
                {
                    break;
                }
            } 
            if(j==len)
            {
                take[len++]=i;
                permutation(n);
                if(len==n)//当数组长度等于n时,说明一次排列已经完成,打印 
                {
                    for(l=0;l<len-1;l++)
                    {
                        printf("%d ",take[l]);
                    }
                    printf("%d
    ",take[l]);
                }
                len--;//寻找写一个排列之前要被当前数组清空 
            }
        }
    }
    int main()
    {
        int n;
        scanf("%d",&n);
        permutation(n);
        return 0;
    }
  • 相关阅读:
    设计模式之六大设计原则学习笔记
    java多线程学习笔记
    mac上安装mongodb数据库教程
    在mac下使用终端命令通过ssh协议连接远程linux系统,代替windows的putty
    从request对象中获取请求json格式的参数
    @Conditional注释
    lambda 根据实体类的拼音排序
    PHP一行代码获取时间戳
    PHP导出生成Excel文件
    Mysql merge引擎介绍
  • 原文地址:https://www.cnblogs.com/xiangguoguo/p/5353905.html
Copyright © 2020-2023  润新知