zoukankan      html  css  js  c++  java
  • 枚举排列 之 “生成1~n的排列”

    一、原题

    输入n之后,生成1~n的排列。

    (题目来源:《算法竞赛入门经典》【刘汝佳】)

    二、题目源代码

    #include <stdio.h>
    #define MAXN 1000
    int a[MAXN][MAXN];
    
    void print_permutation(int n,int*a,int cur)
    {
        int i,j;
        if(cur==n)    //递归边界
        {
            for(i=0;i<n;i++)  printf("%d",a[i]);
            printf("
    ");
        }
        else  for(i=1;i<=n;i++)    //尝试在a[cur]中填各种整数i
        {
            int ok=1;
            for(j=0;j<cur;j++)
            if(a[j]==i)  ok=0;
            if(ok)
            {
                a[cur]=i;
                print_permutation(n,a,cur+1);//递归调用
            }
        }
    }
    int main()
    {
        int n,*a;
        scanf("%d",&n);
        print_permutation(n,a,0);
        return 0;
    }

    三、解题思路

    1.运用递归。以1开头,以2开头,依次往后。

    2.判断当前位置要输入的数 i 是否在之前已经出现过,运用标志变量ok。

    四、心得体会

    1.在main函数开头,要定义n,虽然前面在函数定义中已经定义了,可是函数在main函数中调用之前就用到了n.      数组a在main函数开头可以不定义。

    2.注意在函数定义时对变量定义的方法。

  • 相关阅读:
    ==与is区别
    词典操作
    前端工具---取色截图测量
    css零碎合集
    基于bootstrap的在线布局工具
    js常用功能工具库--Underscore.js
    前端资源荟萃
    在线绘图工具---processon
    表单form浅谈
    前端工具----iconfont
  • 原文地址:https://www.cnblogs.com/fightfor/p/3848843.html
Copyright © 2011-2022 走看看