递归实现排列型枚举题目例题

问题描述

把 1∼n1∼n 的 nn 个正整数排成一行后随机打乱顺序,按字典序输出所有不同的方案。

输入格式

输入一行,包含一个正整数 nn。(1≤n≤8)(1≤n≤8)

输出格式

输出 n!n! 行,每一行为一种方案。字典序较小的先输出。

cpp 复制代码
#include <stdio.h>
#include <stdbool.h> 

int n;
int path[15];
bool st[15];

void dfs(int u) 
{
    if (u > n) 
    {
        for (int i = 1; i <= n; i++) 
        {
            printf("%d ", path[i]);
        }
        printf("\n");
        return; 
    }

    for (int i = 1; i <= n; i++) 
    {
        if (st[i] == false) 
        {
            path[u] = i;    
            st[i] = true;   

            dfs(u + 1);

            st[i] = false; 
        }
    }
}

int main() 
{
    if (scanf("%d", &n) != 1) return 0;

    dfs(1);

    return 0;
}
相关推荐
Fortune792 小时前
自定义类型转换机制
开发语言·c++·算法
2301_814590252 小时前
实时音频处理C++实现
开发语言·c++·算法
Lisssaa2 小时前
打卡第二十八天
数据结构·算法
小此方2 小时前
算法实战论01(双指针篇一):双指针的核心思想与应用场景总结
c++·算法·力扣
2401_878530212 小时前
C++与FPGA协同设计
开发语言·c++·算法
2301_814590252 小时前
C++中的装饰器模式实战
开发语言·c++·算法
weixin_649555672 小时前
C语言程序设计第四版(何钦铭、颜晖)第十一章指针进阶之查找星期
数据结构·算法
2301_804215413 小时前
模板元编程应用场景
开发语言·c++·算法