nyoj366_D的小L_字典序_全排列
D的小L
时间限制: 4000 ms | 内存限制:65535 KB
难度: 2
特定顺序:每一个组合中的值从小到大排列,组合之间按字典序排列。 </dd> <dt> 样例输入 </dt> <dd>
2 2 3</dd> <dt> 样例输出 </dt> <dd>
12 21 123 132 213 231 312 321</dd> <dt> 来源 </dt> <dd> 原创 </dd> <dt> 上传者 </dt> <dd> kapop </dd> <dd> STL: </dd> </dl>
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; int main(){ int T; int n; int a[10]={1,2,3,4,5,6,7,8,9}; scanf("%d",&T); while(T--){ scanf("%d",&n); do{ for(int i=0;i<n;i++){ printf("%d",a[i]); } printf("\n"); }while(next_permutation(a,a+n)); } return 0; }
回溯递归:
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int T; int n; int a[10]; int b[10];//是否已用 void fun(int x){ if(x==n){ for(int i=0;i<n;i++){ printf("%d",a[i]); } printf("\n"); }else{ for(int i=1;i<=n;i++){ if(b[i]==0){ a[x]=i; b[i]=1; fun(x+1); b[i]=0; } } } } int main(){ scanf("%d",&T); while(T--){ memset(b,0,sizeof(b)); scanf("%d",&n); fun(0); } return 0; }