文章目录

  • 一、原题题目
  • 二、解题思路:dfs
  • 三、代码实现
  • 四、题目总结

一、原题题目


这里是原题链接
这里是 AcWing 大佬 Fphoenix 写的题解,请允许我借过来一张图来做这次的笔记

二、解题思路:dfs

三、代码实现

#include <stdio.h>const int N = 10;
int n; // n 定义为全局变量可以方便函数使用,要不然括号里还要再添上一个变量n//就像nums[]和st[]一样,这里没有定义为全局变量,所以还要在函数里定义void dfs(int u, int nums[], _Bool st[])
{if (u > n){//当遍历到最后一层循环时,先输出,紧接着退出函数for (int i = 1; i <= n; i ++)printf("%d ", nums[i]);printf("\n");return ; //返回值为空,直接退出函数}else {for (int i = 1; i <= n; i ++) //按字典序遍历数字if (!st[i]){              //如果st[i] = false,表示该数字未被标记,执行if语句;否则继续遍历st[i] = 1;            //表示该数字被遍历,进行标记 //不能等于 true ,C语言中0为假,非0为真nums[u] = i;          //存入数字dfs(u+1, nums, st);   //进入下一层st[i] = 0;            //恢复现场(当从下一层出来发的时候,这个数字便不再标记)}   }
}int main()
{scanf("%d", &n);int nums[N];      //这里存储的遍历到的数字_Bool st[10] = {0}; //不能用 int st[N] = {0},这是因为在C语言中,const不是一个真真正正的常量,其代表的含义仅仅是只读。//若使用const声明的对象是一个运行时对象,则无法使用其作为某个量的初值、数组的长度、case的值或在类型的情形中使用。//想用 N 也行,解决方法就是把 const int N = 10; 换成 #define N 10 就可以了dfs(1 , nums, st);return 0;
}

调试好久,运行成功:

四、题目总结

总体下来就是跟着大佬的思路走的,虽然不是太明白,但好像就是这么回事,其中在写代码调试的时候发现两个问题(因为我这是纯C语言写的,跟 C++ 还是有点区别的),同样的膜拜两位大佬,帮我解惑:

  1. C语言的布尔类型(_Bool)
  2. C语言编译报错error: variably modified ‘***’ at file scope

全排列问题(AcWing 823. 排列)相关推荐

  1. Acwing 823.排列

    给定一个整数 n,将数字 1∼n 排成一排,将会有很多种排列方法. 现在,请你按照字典序将所有的排列方法输出. 输入格式 共一行,包含一个整数 n. 输出格式 按字典序输出所有排列方案,每个方案占一行 ...

  2. DFS和BFS概念及实践+acwing 842 排列数字(dfs) +acwing 844. 走迷宫(bfs)

    DFS (深搜), 也有说就是递归的 执着: 一直搜到底,然后回溯下一个节点 数据结构 : stack (这里的栈,实际上是编译器内部的栈, 所以说也可以看成递归, 递归内部也是调用编译器内部栈) 空 ...

  3. 什么时候用到全排列_请问在排列组合中,在什么情况下要乘以全排列

    展开全部 在比考虑每个事件出现的次序时,这种次序不同影响了结果,则需用全排列,在排列组合636f707962616964757a686964616f31333433633961中,均分问题要除以全排列 ...

  4. 全排列算法的字典序排列

    字典序排列就是按照字典a-z,1-9的顺序给出字符串的顺序全排列,例如abc的全排列就是从abc一直排到cba.那么给定一个字符串,怎么找出恰好大于该字符串的下一个排列呢? 我们考虑如下的步骤: 1. ...

  5. 全排列变种:限定 排列的差值范围 及 排列中的元素个数

    文章目录 题目描述 思路 代码实现 题目描述 详细描述:字节跳动2019春招研发部分编程题--万万没想到之抓捕孔连顺 输入描述: 第一行包含空格分隔的两个数字 N和D(1 ≤ N ≤ 1000000; ...

  6. 下一个全排列_下一个排列

    下一个全排列 Problem statement: 问题陈述: Given a permutation print permutation just greater than this. 给定一个排列 ...

  7. 语言 全排列 函数_【排列组合】错位全排列的简化计算公式

    一.错位全排列问题 什么是错位全排列问题?其实很简单,在生活中可能都会遇到: "装错信封问题"是由当时最有名的数学家约翰·伯努利(Johann Bernoulli,1667-174 ...

  8. [学习C++ ]C++ STL 全排列函数详解(排列组合与匹配算法)--1

    一.概念 从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列.当m=n时所有的排列情况叫全排列.如果这组数有n个,那么全排列数为n!个. 比如a ...

  9. AcWing 842. 排列数字(DFS)

    题目链接 https://www.acwing.com/problem/content/description/844/ 思路 回溯搜索即可 代码 #include<bits/stdc++.h& ...

最新文章

  1. MapReduce TopK统计加排序
  2. 网络运维现状及发展趋势分析
  3. socket缓冲区以及阻塞模式
  4. SecureCRT上传bash: rz: command not found
  5. 智·御未来 亚信安全巡展·2017即将起航
  6. MFC控件(三)(进度条控件和滑块控件)
  7. 深入理解Attention及变种(四)
  8. Struck Structured Output Tracking with Kernels阅读笔记
  9. armbian 下载加速
  10. java 图片切割_使用Java实现图像分割
  11. Kubernetes 1.25 发布!博云带你玩转新特性
  12. 人力资源2017年的八大趋势
  13. 交叉编译libvisca库ARM版本
  14. 皇家墨尔本理工大学计算机科学专业,皇家墨尔本理工大学计算机科学本科专业.pdf...
  15. 大学应届生,想转行学云计算,该怎么学,没有基础
  16. 用Taurus.MVC 做个企业站(下)
  17. HarmonyOS开发详解(一)——带你全面认识新一代万物联网的鸿蒙智能终端
  18. Linux修改系统时间为东八区北京时间(更换时区)
  19. CSS基础知识(2)
  20. vivo2019校招图像算法工程师

热门文章

  1. 云集微店亿级交易额下的Order子系统架构演变
  2. 一款语文老师写的word办公神级插件
  3. 【jzoj4598】【准备食物】【字典树】
  4. tensorboard画图
  5. 成语——》寻找心中的巴拿马
  6. 快速批量在工作表插入图片
  7. Wireshark数据包分析——Teardrop泪滴攻击
  8. 过等保是浪费钱吗?一定要过等保吗?
  9. 今日睡眠质量记录85分
  10. android 检测屏幕方向,在android中检测屏幕方向