0
点赞
收藏
分享

微信扫一扫

ACWing94. 递归实现排列型枚举

西风白羽 2022-05-02 阅读 30
算法c++

题面

题解——无赖做法

#include <bits/stdc++.h>
using namespace std;
int arr[100];
int main()
{
    int n;
    cin >> n;
    for(int i = 0; i < n; i++)
    {
        arr[i] = i;

    }
    do
    {
        for(int i = 0; i < n; i++) printf("%d ", arr[i]);
        putchar(10);
    }while(next_permutation(arr, arr+n));
    return 0;
}

题解——使用递归

在这里我锻炼自己使用了bitset,其实完全使用bool数组没有任何毛病

#include <bits/stdc++.h>
using namespace std;
int n;
vector<int >order;
bitset<20> chosen;
void cal(int x)
{
    if(x > n)
    {
        for(int i = 0; i < order.size(); i++) printf("%d ", order[i]);
        putchar(10);
        return;
    }
    for(int i = 1; i <= n; i++)
    {
        if(!chosen[i])
        {
            order.push_back(i);
            chosen.set(i);
            cal(x+1);
            order.pop_back();
            chosen.reset(i);
        }
    }
}
int main()
{
    scanf("%d", &n);
    cal(1);
    return 0;
}

举报

相关推荐

0 条评论