AcWing 94. 递归实现排列型枚举

顺序1:枚举每个数要放入哪个位置

查看代码
//暂时不想写

顺序1:时间复杂度

 

顺序2:枚举每个位置要放哪个数

相关题:

AcWing 1209.带分数

查看代码
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

const int N=10;//最大数据9个,有一个不用,故总共10个
int state[10];//各位置选的是谁
bool used[10];//对应下标的元素是否被使用
int n;

void dfs(int u)
{
    if(u>n)
    {
        for(int i=1;i<=n;i++)
            printf("%d ",state[i]);
        puts("");
        return;
    }
    //按顺序选择第u个位置的元素
    for(int i=1;i<=n;i++)
    {
        if(!used[i])//i元素未被使用
        {
            state[u]=i;
            used[i]=true;
            dfs(u+1);
            //保护现场。state[]不需要保护,会自动覆盖
            state[u]=0;
            used[i]=false;
        }
    }
}

int main()
{
    scanf("%d",&n);
    dfs(1);//第几个空位
    
    return 0;
}

顺序2:时间复杂度O(n*n!)

 

posted @ 2023-01-31 23:19  尚方咸鱼  阅读(8)  评论(0编辑  收藏  举报