输入一个数值num,对1到num的所有的数值进行全排列;

其实这个题目可以看成是将1到num个数字放入num个有序的盒子里面;
当将最后一个数字放入盒子里的时候,就输出所有盒子里的数字;这就是一个排列的情况;

用深度优先遍历;dfs,函数怎么写?

首先递归函数。

然后思考递归函数怎么写?
第一:初试态,从第一个盒子开始放下数字;dfs(1);
第二:终止条件,所有的数字全部放下,也就是走到了最后一个盒子的后面;step==num+1;返回;
当dfs返回到上一层的dfs函数的时候,在上一层的dfs函数中就把刚才放入的数字取出来,再选择下一个可以放入的数字放入该盒子中;刚才取出的数字用于放入后面的盒子中;

/*************************************************************************
> File Name: sort_card_dfs.cpp
> Author:
> Mail:
> Created Time: 2015年11月12日 星期四 09时35分50秒
************************************************************************/ #include<iostream>
using namespace std;
const int MAXNUM = 100; int num;//要排序数字的个数
int box[MAXNUM];//用来表示排序情况的数组
int book[MAXNUM];//标记已经放下的数字 void dfs(int step)
{
if (step == num+1){//把所有的数字都放完了之后,就要将此排列输出;
for (int i = 1; i <= num; i++){
cout << box[i] << " ";
}
cout << endl;
return;//其实没有也行,但是没有话程序还要执行下面的循环再返回
}
/*
从num个数字中选择第一个没有放下的数字,然后把它放下(标记为1);
*/
for (int i = 1; i <= num; i++){
if (book[i] == 0){
box[step] = i;
book[i] = 1;
dfs(step+1);
book[i] = 0;//将之前放下的数字取走(标记为0);用于下次排列放入;
}
}
} int main()
{
cout << "Input the n: ";
cin >> num; dfs(1); return 0;
}

输入一个数值num,对1到num的所有的数值进行全排列的更多相关文章

  1. OJ题:输入一个多位的数字,求各数位相加。

    题目内容: 输入一个多位的数字,1求各数位相加. 例如输入12345,则计算1+2+3+4+5=15 输入格式: 一个整数 输出格式: 一个整数 输入样例: 1234567890 输出样例: 45 时 ...

  2. 在JS中如何判断所输入的是一个数、整数、正数、非数值?

    1.判断是否为一个数字: Number(num)不为 NaN,说明为数字 2. 判断一个数为正数: var num=prompt("请输入:"); if(Number(num)&g ...

  3. 输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数

    题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数.例如输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次. 分析:首先最先想到的是遍历从1到n的每 ...

  4. Python输入一个数字打印等腰三角形

    要求 用户输入一个数字,按照数字打印出等腰三角形 思路 1,用户输入的数字为n代表一共有多少行 2,使用一个循环带两个for循环,第一层循环是循环行数,第二层两个平行for循环一个打印空格一个打印*号 ...

  5. 请输入一个大于7的整数,输出小于k并且至少满足下面2个条件中的1个条件的所有正整数

    import java.util.Scanner; /** * @author:(LiberHome) * @date:Created in 2019/3/6 22:06 * @description ...

  6. 编写程序,输入一个N,返回角谷变换(达到1所需)的次数

    import java.util.Scanner; /** * @author:(LiberHome) * @date:Created in 2019/3/6 17:36 * @description ...

  7. 写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和

    例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19. 思路:我们可以先将整数的每一个数字取出来,每次取个位数字,取完后退位(将数字除以10),在取个位数字,依次取出所有的数 ...

  8. 【C语言】输入一个整数N,求N以内的素数之和

    [C语言]输入一个整数N,求N以内的素数之和 /* ========================================================================== ...

  9. 字符串数组 输入3个字符串,要求按由小到大的字母顺序输出; 输入n个学生的姓名和学号到字符串数组中,在输入一个姓名,如果班级有该生则返回其信息,否则返回本班无此人

    输入3个字符串,要求按由小到大的字母顺序输出 如 输入franch england china,输出结果是china england franch 三个数排序输出,比较三个数的大小怎么做? a=18 ...

随机推荐

  1. vue cli 3.x 配置使用 sourceMap

    项目使用vue cli 3.x搭建,没有了配置文件,如何更方便的查找到对应的scss文件,配置项目支持sourceMap方式? 分二步走: 1.项目根目录(不是src目录,不要搞错了)添加vue.co ...

  2. Appium真机运行测试用例

  3. prev([expr]) 取得一个包含匹配的元素集合中每一个元素紧邻的前一个同辈元素的元素集合。

    prev([expr]) 概述 取得一个包含匹配的元素集合中每一个元素紧邻的前一个同辈元素的元素集合. 可以用一个可选的表达式进行筛选.只有紧邻的同辈元素会被匹配到,而不是前面所有的同辈元素.直线电机 ...

  4. 多线程中volatile关键字的作用

    原文链接:https://blog.csdn.net/xuwentao37x/article/details/27804169 多线程的程序是出了名的难编写.难验证.难调试.难维护,这通常是件苦差事. ...

  5. 百度智能api接口汇总

    一:自然语言处理 # -*- coding: utf-8 -*- # @Author : FELIX # @Date : 2018/5/18 9:47 # pip install baidu-aip ...

  6. Java学习笔记(持续更新ing)

    1.在读入字符串时:    str = sc.nextLine();     //读入一行                                     str = sc.next();   ...

  7. codeforces gym #101161H - Witcher Potion(状压DP)

    题目链接: http://codeforces.com/gym/101161/attachments 题意: 总共有n瓶药可供选择 每瓶药可以增加$e_i$点体力,和$p_i$点毒性 每分钟消耗1点毒 ...

  8. CF1207B

    CF1207B-Square Filling 题意: 两个矩阵a,b,已知矩阵b,每次能修改b矩阵中相邻的四个格(b为空矩阵),使b变为a 解法: 枚举矩阵中的1,按题意修改,并把改过的四个点都标记一 ...

  9. 1.5 JAVA的IO操作

    1.5 JAVA的IO操作 参考链接:https://www.runoob.com/java/java-files-io.html 一.JAVA的IO操作 由于JAVA引用外界的数据,或是将自身的数据 ...

  10. Qt DLL总结【一】-链接库预备知识

    1.链接库概念 静态链接库和动态链接库介绍 我们可以创建一种文件里面包含了很多函数和变量的目标代码,链接的时候只要把这个文件指示给链接程序就自动地从文件中查找符合要求的函数和变量进行链接,整个查找过程 ...