AcWing
  • 首页
  • 题库
  • 题解
  • 分享
  • 问答
  • 活动
  • 应用
  • 吐槽
  • 登录/注册

AcWing 823. 排列

作者: 作者的头像   微笑丶是我仅剩的骄傲 ,  2021-03-08 13:03:47 ,  阅读 12


0


1
//这里填你的代码^^
//注意代码要放在两组三个点之间,才可以正确显示代码高亮哦~
#include <cstdio>

using namespace std;

const int N = 10;

int n;

void dfs(int u, int nums[], bool st[])
{
    if(u > n)
    {               
        for(int i = 1; i <= n; i++) printf("%d ", nums[i]);
        puts(" ");
    }
    else
    {
        for(int i = 1; i <= n; i++)
        {
            if(!st[i])
            {
                st[i] = true;
                nums[u] = i;
                dfs(u + 1, nums, st);
                st[i] = false; //恢复现场
            }
        }
    }
}

int main()
{
    scanf("%d", &n);
    int nums[N];
    bool st[N] = {0};

    dfs(1, nums, st);
    return 0;
}

i=1(st[1]==0)i=1
st[1]=1     //st[i]=true;
num[1]=1    //num[u]=i;
    i=1(st[1]==1,st[2]==0)i=2//缩进表示递归层数
    st[2]=1
    num[2]=2
        i=1(st[1,2]==1,st[3]==0)i=3
        st[3]=1
        num[3]=3
            u=4>3//输出num,并中止调用,此时输出123 
        st[3]=0//if结束时,恢复现场
    st[2]=0//if结束时,恢复现场
    i=3(st[3]==0)i=3
    st[3]=1
    num[2]=3
        i=1(st[1]==1,st[2]==0)i=2
        st[2]=1
        num[3]=2
            u=4>3
        st[2]=0
    st[3]=0
i=2(st[2]==0)i=2
//123 132 

0 评论

你确定删除吗?

© 2018-2021 AcWing 版权所有  |  京ICP备17053197号-1
联系我们  |  常见问题
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标
请输入绑定的邮箱地址
请输入注册信息