当前位置: 首页 > news >正文

AcWing94. 递归实现排列型枚举:输出1~n的全排列

题目

把 1∼ n n n n n n 个整数排成一行后随机打乱顺序,输出所有可能的次序。

输入格式

一个整数 n n n

输出格式

按照从小到大的顺序输出所有方案,每行 1 个。

首先,同一行相邻两个数用一个空格隔开。

其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面。

数据范围

1 ≤ n ≤ 9 1≤n≤9 1n9

输入样例

3

输出样例

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

思路

该问题也被称为全排列问题,所有可能的方案总数是 n ! n! n! 种。在这里,递归需要求解的问题是 “把指定的 n n n 个整数按照任意次序排列”,在每次递归中,尝试把每个可用的数作为数列中的下一个数,求解 “把剩余 n − 1 n-1 n1 个整数按照任意次序排列” 这个规模更小的子问题。

代码

#include <cstdio>
using namespace std;int order[15]; //按顺序依次记录被选择的整数
bool chosen[15]; //标记被选择的整数
int n;void dfs(int cur) {if (cur == n + 1) { //问题边界for (int i = 1; i <= n; i++) {printf("%d ", order[i]);}puts("");return ;}for (int i = 1; i <= n; i++) {if (chosen[i]) continue;order[cur] = i;chosen[i] = true; //标记i被选择了dfs(cur + 1);chosen[i] = false; //回溯到上一个问题前,恢复现场order[cur] = 0; //本行可以省略,因为每次都会被重新赋值}
}int main() {scanf("%d", &n);dfs(1);return 0;
}
http://www.lryc.cn/news/215536.html

相关文章:

  • 神经网络多种注意力机制原理和代码讲解
  • 前端HTML
  • Jenkins安装(Jenkins 2.429)及安装失败解决(Jenkins 2.222.4)
  • vue中哪些数组操作可以重排
  • 订单创建订单确认、收货创建收货确认取消收货、生成库存和领用单发料
  • yolox转rknn
  • llava1.5模型安装、预测、训练详细教程
  • 一个ppt带你读懂网络安全行业四大顶会之一的ndss论文<<Large Language Model guided Protocol Fuzzing>>
  • ajax调用springboot后台接口
  • 2021-arxiv-LoRA Low-Rank Adaptation of Large Language Models
  • dockefile
  • rpc入门笔记 0x02 protobuf的杂七杂八
  • keepalived与nginx与MySQL
  • Pod基础概念
  • WebDAV之π-Disk派盘 + 一叶日记
  • 在IDEA运行spark程序(搭建Spark开发环境)
  • 无穷级数例子
  • C++构造函数和析构函数详解
  • MySQL数据库干货_16—— SQL99标准中的查询
  • LLM大语言模型训练中常见的技术:微调与嵌入
  • 每日一练 | 网络工程师软考真题Day47
  • Kafka - 监控工具 Kafka Eagle:实时洞察Kafka集群的利器
  • infercnv hpc东南服务器 .libpath 最终使用monocle2环境安装
  • 【音视频 | Ogg】RFC3533 :Ogg封装格式版本 0(The Ogg Encapsulation Format Version 0)
  • Hadoop时代落幕,开源大数据将何去何从?
  • 作为一名程序员面临哪些挑战?应该如何应对?
  • flink的安装与使用(ubuntu)
  • 容器:软件性能测试的最佳环境
  • 【Qt控件之QMovie】详解
  • Star History 九月开源精选 |开源 GitHub Copilot 替代