全排列问题(AcWing 823. 排列)
文章目录
- 一、原题题目
- 二、解题思路: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++ 还是有点区别的),同样的膜拜两位大佬,帮我解惑:
- C语言的布尔类型(_Bool)
- C语言编译报错error: variably modified ‘***’ at file scope
全排列问题(AcWing 823. 排列)相关推荐
- Acwing 823.排列
给定一个整数 n,将数字 1∼n 排成一排,将会有很多种排列方法. 现在,请你按照字典序将所有的排列方法输出. 输入格式 共一行,包含一个整数 n. 输出格式 按字典序输出所有排列方案,每个方案占一行 ...
- DFS和BFS概念及实践+acwing 842 排列数字(dfs) +acwing 844. 走迷宫(bfs)
DFS (深搜), 也有说就是递归的 执着: 一直搜到底,然后回溯下一个节点 数据结构 : stack (这里的栈,实际上是编译器内部的栈, 所以说也可以看成递归, 递归内部也是调用编译器内部栈) 空 ...
- 什么时候用到全排列_请问在排列组合中,在什么情况下要乘以全排列
展开全部 在比考虑每个事件出现的次序时,这种次序不同影响了结果,则需用全排列,在排列组合636f707962616964757a686964616f31333433633961中,均分问题要除以全排列 ...
- 全排列算法的字典序排列
字典序排列就是按照字典a-z,1-9的顺序给出字符串的顺序全排列,例如abc的全排列就是从abc一直排到cba.那么给定一个字符串,怎么找出恰好大于该字符串的下一个排列呢? 我们考虑如下的步骤: 1. ...
- 全排列变种:限定 排列的差值范围 及 排列中的元素个数
文章目录 题目描述 思路 代码实现 题目描述 详细描述:字节跳动2019春招研发部分编程题--万万没想到之抓捕孔连顺 输入描述: 第一行包含空格分隔的两个数字 N和D(1 ≤ N ≤ 1000000; ...
- 下一个全排列_下一个排列
下一个全排列 Problem statement: 问题陈述: Given a permutation print permutation just greater than this. 给定一个排列 ...
- 语言 全排列 函数_【排列组合】错位全排列的简化计算公式
一.错位全排列问题 什么是错位全排列问题?其实很简单,在生活中可能都会遇到: "装错信封问题"是由当时最有名的数学家约翰·伯努利(Johann Bernoulli,1667-174 ...
- [学习C++ ]C++ STL 全排列函数详解(排列组合与匹配算法)--1
一.概念 从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列.当m=n时所有的排列情况叫全排列.如果这组数有n个,那么全排列数为n!个. 比如a ...
- AcWing 842. 排列数字(DFS)
题目链接 https://www.acwing.com/problem/content/description/844/ 思路 回溯搜索即可 代码 #include<bits/stdc++.h& ...
最新文章
- MapReduce TopK统计加排序
- 网络运维现状及发展趋势分析
- socket缓冲区以及阻塞模式
- SecureCRT上传bash: rz: command not found
- 智·御未来 亚信安全巡展·2017即将起航
- MFC控件(三)(进度条控件和滑块控件)
- 深入理解Attention及变种(四)
- Struck Structured Output Tracking with Kernels阅读笔记
- armbian 下载加速
- java 图片切割_使用Java实现图像分割
- Kubernetes 1.25 发布!博云带你玩转新特性
- 人力资源2017年的八大趋势
- 交叉编译libvisca库ARM版本
- 皇家墨尔本理工大学计算机科学专业,皇家墨尔本理工大学计算机科学本科专业.pdf...
- 大学应届生,想转行学云计算,该怎么学,没有基础
- 用Taurus.MVC 做个企业站(下)
- HarmonyOS开发详解(一)——带你全面认识新一代万物联网的鸿蒙智能终端
- Linux修改系统时间为东八区北京时间(更换时区)
- CSS基础知识(2)
- vivo2019校招图像算法工程师