算法入门竞赛经典7.2枚举排列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法入门竞赛经典7.2枚举排列相关的知识,希望对你有一定的参考价值。

7.2.1  生成1~n的排列

#include<stdio.h>
int num[20],n;

void Print(int n,int *a,int cur)
{
    int i,j,flag;
    if(cur == n+1)//递归边界 
    {
        for( i = 1; i < cur; i ++)
            printf("%d ",a[i]);
        printf("\n");
    }
    else
    {
        for( i = 1; i <= n; i ++)
        {
             flag = 1;
            for( j = 1; j < cur; j ++)
                if(a[j] == i)//如果i已经在a[1..cur-1]出现过,则舍弃 
                    flag = 0;
            if(flag)
            {
                a[j] = i;
                Print(n,a,cur+1);//递归调用 
            }
        }
    }
}

int main()
{
    scanf("%d",&n);
    Print(n,num,1);
    return 0;
}

 

以上是关于算法入门竞赛经典7.2枚举排列的主要内容,如果未能解决你的问题,请参考以下文章

算法竞赛入门经典 习题 2-10 排列(permutation)

2021算法竞赛入门班第一节课枚举贪心习题

《算法竞赛入门经典》5.13周期串

《算法竞赛入门经典》3.3最长回文子串

算法竞赛入门经典 例题 3-4 回文串

《算法竞赛入门经典(第二版)》习题解答——第二章