luogu P1706全排列问题

题目描述

输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字。

输入输出格式

输入格式:

n(1≤n≤9)

输出格式:

由1~n组成的所有不重复的数字序列,每行一个序列。每个数字保留5个常宽。

题解

这题真是道好题,用STL的好题

正常的题解是这样的(我同学的qwq)

#include<iostream>
#include<iomanip>
using namespace std;
int n;
int a[10001];
bool b[10001]={0};
void print()
{
    int i;
    for(i=1;i<=n;i++)
    cout<<setw(5)<<a[i];
    cout<<endl;
    return ;
}
void dfs(int k)
{
    int i;
    for(i=1;i<=n;i++)
    {
        if(!b[i])
        {
            a[k]=i;
            b[i]=1;
            dfs(k+1);
            b[i]=0;
        }
        
    }
    if(k==n+1)
    print();
    
    return ;
}
int main()
{
    cin>>n;
    dfs(1);
    
}

然而你们以为我会手打向上边那样的代码吗(偷笑)

下边是我写的代码

#include<bits/stdc++.h>
using namespace std;
int a[11];
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
        a[i]=i,printf("    %d",a[i]);
    while(next_permutation(a+1,a+1+n))
    {
        printf("
");
        for(int i=1;i<=n;i++)
        printf("    %d",a[i]);
    }
    return 0;
}
next_permutation()STL中求下一个排列
友链:http://www.slyar.com/blog/stl_next_permutation.html
原文地址:https://www.cnblogs.com/Alarak26/p/8525225.html