注意出栈完和进栈完都要回溯一次
第一个你要是 进1出1进2出2进3出3
然后回溯到2进栈
2不出,然后3进栈
你要是进完3不回溯,会错
详情见图
代码
#include<bits/stdc++.h>
using namespace std;
int n;
const int N=25;
int stk[25],tt;
int a[N];
int num;
void mysort(int cnt,int j)
{
if(cnt==n)
{
num++;
if(num<=20)
{
for(int i=1;i<=n;i++)cout<<a[i];
puts("");
}
return;
}
if(tt)
{
a[cnt+1]=stk[tt];
int temp=stk[tt];
tt--;
mysort(cnt+1,j);
stk[++tt]=temp;
a[cnt+1]=0;
if(j<=n)
{
stk[++tt]=j;
mysort(cnt,j+1);
tt--;
}
}
else
{
if(j<=n)
{
stk[++tt]=j;
mysort(cnt,j+1);
tt--;
}
}
}
int main()
{
cin>>n;
mysort(0,1);
return 0;
}