刷题--DFS--823.排列

DFS

823.排列

给定一个整数n,将数字1~n排成一排,将会有很多种排列方法。

现在,请你按照字典序将所有的排列方法输出。

输入格式

共一行,包含一个整数n。

输出格式

按字典序输出所有排列方案,每个方案占一行。

数据范围

1≤n≤91≤n≤9

输入样例:

3

输出样例:

1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

思维过程:

​1.画出递归数

2.思考递边界与如何递归出该树:

​ 1)每层的父节点有n个分支

​2)树高为n

​3)放置数值时候,子节点是无法再次放置同样的数值的,所以需要设置一个标识 bool state[n]。如1_ _,放置了1之后,就在state数组里i=1的值设为true,代表已经用过。值得思考的是,在递归树中,子节点返回父节点的时候,得将设置的true恢复为false. 如 1_ _,返回后,就得将state[1]置为false,因为在2_ _这个递归中,1是可以被使用的。 以下是代码:

#include <iostream>
#include <memory.h>
using namespace std;

//代表数组的长度,同时也是递归树的高度
int n;
//保存值的数组
int s[10];
//保存了哪些数据已经用过了,下标代表数据,值代表是否用过
bool state[10];
void dfs(int n1) {
    //边界,说明已经排列完了一次
    if (n1 == n) {
        for (int i = 0; i < n; i++) cout << s[i]+1<<" ";
        cout << endl;
        return;
    }

    for (int i = 0; i < n; i++) {
         //说明未被使用过
        if (state[i] == false) {
            //进行s填充,并将相应标志位置为true
            s[n1] = i;
            state[i] = true;
            //进行下一次dfs
            dfs(n1 + 1);
            //回到上一层后,将原来修改为true的state恢复现场为false
            state[i] = false;
        }
    }
}

int main() {
    cin >> n;
    dfs(0);
}
(0)

相关推荐

  • (1条消息) 万字长文!二叉树入门和刷题看这篇就够了!

    今天是小浩算法 "365刷题计划" 二叉树入门 - 整合篇.本篇作为入门整合篇,已经砍去难度较大的知识点,所有列出的内容,均为必须掌握.因为很长,写下目录: 二叉树是啥 二叉树的最 ...

  • 图解:什么是线段树?

    作者简介:黄子桓,华师大三学生一枚,进场参加各类算法竞赛,并获得了挺多荣誉,耗费 3 天时间给大家贡献此文! 图文:黄子桓 编辑:景禹 致谢:感谢子桓的无私贡献,收到您的投稿已有时日,只是我工作时间紧 ...

  • leetcode算法总结 —— DFS深度优先搜索

    DFS 模板 dfs(TreeNode* root, int path) { //父节点要传给子节点值,则放到递归的形参中.`void dfs(TreeNode* root, int path)` i ...

  • (1条消息) 漫画:二叉树系列 第二讲(层次遍历与BFS)

    在上一节中,我们通过例题学习了二叉树的DFS(深度优先搜索),其实就是沿着一个方向一直向下遍历.那我们可不可以按照高度一层一层的访问树中的数据呢?当然可以,就是本节中我们要讲的BFS(宽度优先搜索), ...

  • ​LeetCode刷题实战266:回文排列

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  • ​LeetCode刷题实战267:回文排列II

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  • 如何学好高中数学排列组合?给你几点实用建议,别再大量刷题了

    高中数学排列组合,一直是考试的重点和热点,也是学习上的难点.想要学好并不容易,因为这部分知识点比较抽象,同学们上课跑了一回神,再去听课就跟不上了.妄想通过题海战术来弄懂这部分知识点的同学,效果都不理想 ...

  • ​LeetCode刷题实战60:第k个排列

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  • 2021最新 SpringMVC面试题精选(附刷题小程序)

    目录 推荐使用小程序阅读 1. Spring MVC基础 1.1 什么是Spring MVC? 1.2 Spring MVC的优点有那些? 1.3 Spring MVC的主要组件? 1.4 什么是Di ...

  • 中考语文阅读理解满分,不是靠刷题就能实现的,3个积累和分析的方法,同学们可以试试……

    中考在即,各个学校开始进入月考模拟的测试阶段了.小岛老师看了不少地区的中考模拟卷子,也分析了挺多高分试卷,无疑都是在阅读理解题型上拿到了满分.从阅读和写作这两块看,中学阶段的语文学习方向和小学是大不同 ...

  • 2021高考作文考前必刷题-1

    考前必刷题 阅读下面的材料,根据要求写作. 材料一百年的风让山河天翻地覆,百年的梦让人心有了温度.多少青丝变白发,青春献热土,原来每一步都铭心刻骨.百年求索这天地拉开大幕,百年追寻这旗帜迎风飞舞. - ...

  • ​LeetCode刷题实战260:只出现一次的数字 III

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  • 2021最新 Spring面试题精选(附刷题小程序)

    目录 推荐使用小程序阅读 1. Spring基础 1.1 什么是 spring? 1.2 Spring框架的设计目标,设计理念,和核心是什么? 1.3 Spring 框架中都用到了哪些设计模式? 1. ...