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分