问题标题: 酷町堂:4935

0
0
已解决
史亚东
史亚东
新手守护
新手守护

题目描述 Description

给出一个正整数n,以及从1到n的一个排列,试求出这个排列的后一个排列。

输入描述 Input Description

第一行,一个正整数n
第二行,从1到n的一个排列

输出描述 Output Description

所给出排列的下一个排列,数据保证存在下一个排列

样例输入 Sample Input

3 1 2 3

样例输出 Sample Output

1 3 2

数据范围及提示 Data Size & Hint

n<=20

#include<iostream>
#include<string>
using namespace std;
int n,a[26],b[26],used[26],cnt;
void dfs(int x)
{
    if(cnt==-1)return ;
    if(cnt==1&&x>n){
        for(int i=1;i<=n;i++)
        {
            cout<<a[i]<<" ";
        }
        cnt=-1;
        return ;
    }
    if(x>n)
    {
        for(int i=1;i<=n;i++)
        {
            if(a[i]!=b[i])return ;
        }
        cnt=1;
    }
    for(int i=1;i<=n;i++)
    {
        if(used[i]==false)
        {
            a[x]=i;
            used[i]=true;
            dfs(x+1);
            used[i]=false;
        }
    }
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>b[i];
    }
    dfs(1);
    return 0;
}

 

史亚东在2020-05-25 20:01:27追加了内容

我的答案超时40分


0
已采纳
汪恺恒
汪恺恒
中级启示者
中级启示者

输入n,A数组;

next_permutation(a+1,a+1+n);//要加#include<algorithm>

输出a数组;

之后就AC了

 

0
0
史亚东
史亚东
新手守护
新手守护

谁来回答一下我的问题

0
杜智宸
杜智宸
中级光能
中级光能

先别结帖,给我点时间帮你看看

我要回答