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

news/2024/6/17 15:26:07 标签: 深度优先, 递归, 全排列

题目

把 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.niftyadmin.cn/n/5139860.html

相关文章

GSA、GSEA、ssGSEA、GSVA的算法原理及它们的联系与区别

一、 简述 为了从基因的表达水平中得到更加具体直观的生物学功能变化的信息&#xff0c;多种基于已知的基因集的分析方法应运而生。其中&#xff0c;基因集分析&#xff08;Gene Set Analysis&#xff09;、基因集富集分析&#xff08;Gene Set Enrichment Analysis&#xff09…

精品基于Python的考场考试分配规划系统

《[含文档PPT源码等]精品基于Python的考场分配规划系统的设计与实现》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功&#xff01; 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;python 使用框架&#xff1a;Django 前端技…

10 _ 递归:如何用三行代码找到“最终推荐人”?

推荐注册返佣金的这个功能我想你应该不陌生吧?现在很多App都有这个功能。这个功能中,用户A推荐用户B来注册,用户B又推荐了用户C来注册。我们可以说,用户C的“最终推荐人”为用户A,用户B的“最终推荐人”也为用户A,而用户A没有“最终推荐人”。 一般来说,我们会通过数据…

Hafnium总体考虑

安全之安全(security)博客目录导读 目录 一、安全世界构建平台 二、安全分区调度 三、平台拓扑

C语言 定义一个函数,并调用,该函数中完成鸡兔同笼问题,头和腿的数量由键盘录入

#include<stdio.h> void jttl(a,b) {int tag 0;for (int j 0; j < a; j){for(int t 0;t < b;t){if(jt a && 2*j 4*t b){tag 1;printf("鸡有%d只,兔有%d只\n",j,t);}}} if(tag) {printf("您输入的头数和腿数正确\n");}else{prin…

【数据结构】数组和字符串(十三):链式字符串的基本操作(串长统计、查找、复制、插入、删除、串拼接)

文章目录 4.3 字符串4.3.1 字符串的定义与存储4.3.2 字符串的基本操作&#xff08;链式存储&#xff09;1. 结构体2. 初始化3. 判空4. 串尾添加5. 打印6. 串长统计7. 查找8. 复制9. 插入10. 删除11. 串拼接12. 销毁13. 主函数14. 代码整合 4.3 字符串 字符串(String)是由零个或…

利用python绘制多个箱型图

文章目录 1. 图片2. 代码 1. 图片 图片示例如下所示&#xff1a; 2. 代码 代码如下所示&#xff1a; # Define the custom order based on atmospheric stability custom_order [vus_0, us_1, ne_2, ws_3, ws_4, s_5, s_6, s_7, vs_8, vs_9]# Step 1: Reorder the statis…

maven环境变量的配置

windows系统 1. win键 r&#xff0c;输入sysdm.cpl打开系统属性界面&#xff0c;选择高级栏目&#xff0c;点击环境变量菜单打开环境变量界面。 2. 选择系统变量下的新建菜单&#xff0c;变量名输入MAVEN_HOME&#xff0c;变量值输入maven的安装目录&#xff0c;例如&#xff…