【算法入门竞赛经典】【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;
}
时间: 2024-11-03 06:04:28

【算法入门竞赛经典】【7.2枚举排列】的相关文章

回溯算法入门及经典案例剖析(初学者必备宝典)

前言 基于有需必写的原则,并且当前这个目录下的文章数量为0(都是因为我懒QAQ),作为开局第一篇文章,为初学者的入门文章,自然要把该说明的东西说明清楚,于是...我整理了如下这篇文章,作者水平有限,有不足之处还望大家多多指出~~~ 概念 首先,回溯是什么意思?很多初学者都会问这样的一个问题.我们可以举这样一个例子: 1 1 1 1 0 1 0 1 0 1 0 1 0 1 1 1 我们看到了如图所示的一个4*4的迷宫了,我们假设数字1标记的位置为道路,数字0标记的位置为一堵墙,一个人由起点(0.0

算法入门经典第六章 例题6-14 Abbott的复仇(Abbott&#39;s Revenge)BFS算法实现

Sample Input 3 1 N 3 3 1 1 WL NR * 1 2 WLF NR ER * 1 3 NL ER * 2 1 SL WR NF * 2 2 SL WF ELF * 2 3 SFR EL * 0 Sample Output (3,1) (2,1) (1,1) (1,2) (2,2) (2,3) (1,3) (1,2) (1,1) (2,1) (2,2) (1,2) (1,3) (2,3) (3,3) 析 题目的大意是,输入起点,离开起点时的朝向和终点,求一条最短路. 每一个

Python3入门机器学习 经典算法与应用

详情请交流  QQ  709639943 00.Python3入门机器学习 经典算法与应用 00.老司机学python篇:第一季(基础速过.机器学习入门) 00.Python 从入门到精通 78节.2000多分钟.36小时的高质量.精品.1080P高清视频教程!包括标准库.socket网络编程.多线程.多进程和协程. 00.Django实战之用户认证系统 00.Django实战之企业级博客 00.深入浅出Netty源码剖析 00.NIO+Netty5各种RPC架构实战演练 00.JMeter 深

Python3入门机器学习--经典算法与应用|Python3机器学习

Python3入门机器学习--经典算法与应用网盘地址:https://pan.baidu.com/s/1JU3xUckrJ6mIFmbPZ2SE-g 密码: b4i8备用地址(腾讯微云):https://share.weiyun.com/1a5b40b998601d64fb5211c21fb71212 密码:3kt4wq 使用scikit-learn内置的大量数据集,结合实际项目,让你不仅懂算法更会用算法:使用机器学习算法进行图像去噪,让你认识一个不一样的机器学习世界:分类任务使用世界著名的MN

Python3入门机器学习经典算法与应用学习 资源

 Python3入门机器学习经典算法与应用学习 资源 datasets可以用来加载真实数据进行模型训练的测试 import sklearn.datasetsdatasets.load_iris() # 用于加载鸢尾花数据集datasets.load_digits() # 用于加载手写识别的数据集datasets.load_boston() #  用于加载波士顿房价的数据集fetch_mldata用于加载MNIST数据集from sklearn.datasets import fetch_mlda

枚举排列 之 “生成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(&quo

算法入门(C++)

iostream,这个头文件里有很多常用的函数,比如swap交换两个变量的值,max求两个值的最大值等. cstdio头文件,这个头文件里包含C风格的输入输出.如果你之前学习过C++语言应该知道cin读入和cout输出的方法.那么我们为什么还要用C的scanf和printf呢?因为scanf和printf要比cin和cout的效率高得多. using namespace std 如果没这行的话,swap就要写成std::swap,代码写起来会麻烦些. main函数它的返回值是int类型的.那么它

算法入门心得

最近看了刘汝佳写的算法入门经典  感觉自己的基础实在太烂了  所以总结了一些我们比较容易犯的错误给大家看看(大牛就不要看了O(∩_∩)O) 1.浮点数:两个整数计算的是浮点数的时候一定要把整数先化为浮点数  5-0.1计算机先把5变5.0之后再进行计算的 2.异或运算:这个是个很神秘的东西如果要在一个数组中找一个只有一个的数那么就可以用异或了 异或也可以用在两个数的交换a = a^b; b = a ^ b; a = a ^ b;就实现转换了 自己异或自己等于0: 3.逻辑运算符都是短路运算符a|

贝叶斯公式由浅入深大讲解—AI基础算法入门

1 贝叶斯方法 长久以来,人们对一件事情发生或不发生的概率,只有固定的0和1,即要么发生,要么不发生,从来不会去考虑某件事情发生的概率有多大,不发生的概率又是多大.而且概率虽然未知,但最起码是一个确定的值.比如如果问那时的人们一个问题:"有一个袋子,里面装着若干个白球和黑球,请问从袋子中取得白球的概率是多少?"他们会想都不用想,会立马告诉你,取出白球的概率就是1/2,要么取到白球,要么取不到白球,即θ只能有一个值,而且不论你取了多少次,取得白球的概率θ始终都是1/2,即不随观察结果X