acwing<94. 递归实现排列型枚举>

简介: 每日打卡

image.png

还是使递归的方法,根据题意我们要输出n个数的随机排列的全部情况,思路就有所不同,若当前有n个空位,便有n个选择,随空位的减少可供使用的数字也随之减少,于是我们需要两个数组,一个负责表示当前空位填入的数值,另一个则负责表示当前数字是否被使用过,之后不断深入与回溯,便可达到目的。


#include<cstdio>
#include<string>
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 10;
int n,count;
int sta[N];
bool used[N];
void dfs(int i)
{
    if(i>n)  //i>n时递归结束
    {
        for(int j = 1;j<=n;j++) printf("%d ",sta[j]); //输出空格对应的数字
        puts("");
        return;
    }
    for(int j = 1;j<=n;j++)
    {
        if(!used[j])  //判断该数字没被使用过,否则继续查找
        {
            sta[i] = j;  //当前位置变为该数字
            used[j] = true; //表示当前数字已使用
            dfs(i+1);   //选择下一位置的数字
            used[j] = false;  //重置使用
        }
    }
}
int main()
{
    scanf("%d",&n);
    dfs(1);
    return 0;
}

image.gif

目录
相关文章
|
6月前
【洛谷 P2089】烤鸡(循环枚举)
烤鸡问题探讨了如何组合10种配料达成特定美味程度。给定正整数$n$代表美味程度,程序需列出所有使得配料总和等于$n$的方案。样例输入11对应10种配料的不同组合,输出显示了10种符合条件的方案。代码通过暴力枚举实现,AC代码展示了如何遍历所有可能的配料质量组合来找到答案。对于100%的数据,$n\leq5000$。
64 0
92. 递归实现指数型枚举
92. 递归实现指数型枚举
|
6月前
|
移动开发 C++
【洛谷 P1157】组合的输出 题解(深度优先搜索+枚举子集)
该问题要求编程输出从1到n中选择r个元素的所有组合,组合按字典序排列。输入包含两自然数n和r(1&lt;n&lt;21, 0≤r≤n)。输出每个组合时,每个数字占据3个字符宽度。提供的AC代码使用C++,通过递归搜索方法枚举子集。样例输入为5 3,输出显示所有3个元素的组合。
55 0
|
7月前
递归实现指数型枚举
递归实现指数型枚举
32 0
|
7月前
Qsort函数实现对各类型数组中元素的排序(思路简单)
Qsort函数实现对各类型数组中元素的排序(思路简单)
|
算法 测试技术 C#
C++二分查找算法:132 模式解法二枚举2
C++二分查找算法:132 模式解法二枚举2
递归实现组合型枚举
递归实现组合型枚举
45 0
递归实现的三种枚举
递归实现的三种枚举
53 0