擅长排列的小明 DFS()和 STL两种方法
擅长排列的小明65535 KB难度:4
23 14 2样例输出
123121314212324313234414243
DFS:
#include<cstdio>#include<cstring>using namespace std;int n,m;int a[21];int su[101];
int visit[200];void DFS(int c){ if(c==m) { for(int i=0; i<m; i++) printf("%d",a[i]); //printf("%d",a[m-1]); printf("\n"); } else { for(int i=0; i<n; i++) if(!visit[i])// 如果 次数 与前一个数相加为素数 且没被拜访过 则 赋值 { a[c]=i+1; visit[i]=1;// 标记 DFS(c+1);// 继续查找下一行 visit[i]=0;//回溯 } }}
int main(){ int test; scanf("%d",&test); while(test--) { scanf("%d%d",&n,&m); memset(visit,0,sizeof(visit)); DFS(0); } return 0;}
STL:
#include <iostream>#include <algorithm>#include <string>using namespace std;
int main(){ int i,j,k,T; cin>>T; while(T--) { int x,y; string s1,s2; cin>>x>>y; for(i=1; i<=x; i++) { s1 += '0'+i; } s2=s1.substr(0,y); cout<<s2<<endl; while(next_permutation(s1.begin(),s1.end())) { if(s2!=s1.substr(0,y)) { s2=s1.substr(0,y); cout<<s2<<endl; } } } return 0;}