【字典序】 出栈序列

传送门

题意

数字\(1\sim n\)依次进栈,求字典序前20的出栈序列

数据范围

\(1\leq n \leq 20\)

题解

dfs,栈不空就出栈保证字典序列

Code

#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for(int i=a;i<n;i++)
#define pb push_back
const int N=25;
vector<int>a; 
int stk[N],num;
int n;
int cnt=20,now=1;
void dfs(){
    if(!cnt) return;
    if(a.size()==n){
        cnt--;
        rep(i,0,n) printf("%d",a[i]);
        puts("");return;
    }
    if(num){
        a.pb(stk[num]);        
        num--;
        dfs();
        stk[++num]=a.back();
        a.pop_back();
    }
    if(now<=n){
        stk[++num]=now;
        now++;
        dfs();
        now--;
        num--;
    }
}
int main(){
    scanf("%d",&n);
    dfs();
}
posted @ 2020-07-11 00:39  Hyx'  阅读(266)  评论(0)    收藏  举报