非検索ランキングに基づいたアプローチを提供します
アイデア:
回答アレイ半分、
変数\(\ NN)は、で囲まれる
不規則領域の後半、順序付けられた領域の最初の半分の
乱れ領域の辞書順に従ってソート
各再帰は、
すべての要素が無秩序ループ領域から採取し、
およびオーダー領域を加えた
境界のシフトの後と
再不規則領域後の
辞書式順序に並べ替え、
パラメータとして次に変更アレイ
次の層の再帰に渡されます
領域は長順序付けに等しい場合\(Lの\)時、
それらは、溶液のセットを発見し、出力することができ
コードを接続します。
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
int l;
using namespace std;
void p(int nn,char b[10]) //将字符串分为有序区和无序区,以nn为界
{
for(int i=nn;i<=l;i++) //从分界线上开始,依次枚举无序区元素
{
char c[10]; //储存当前的 字符串
for(int k=0;k<=9;k++)
c[k]=b[k];
swap(c[nn],c[i]); //令c[nn]等于找到的字符
if(nn+1<=l) //边界小于l,则重排序无序区
sort(c+(nn+1),c+l+1);
if(nn==l) //若到达尾部,则输出
{
for(int j=0;j<=l;j++)
printf("%5c",c[j]);//输出坑点
printf("\n");
}
else
p(nn+1,c); //继续找下一个
}
}
char a[10];
int b;
int main()
{
cin>>b;
for(int i=0;i<b;i++)//初始化答案数组
a[i]=i+'1';
l=strlen(a)-1;
p(0,a);
}