学习的紫书的回溯,理解起来还是好困难的说啊= =
#include<iostream>
#include<cstdio>
#include<cstring>
#include <cmath>
#include<stack>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<algorithm>
using namespace std; typedef long long LL;
const int INF = (<<)-;
const int mod=;
const int maxn=; char s[maxn];
int n,L,cnt,sum; int dfs(int cur){
if(cnt++==n){
int tmp=;
for(int i=;i<cur;i++) {
if(i%==&&i) printf("\n");
else if(i%==&&i) printf(" ");
printf("%c",'A'+s[i]);
}
printf("\n");
printf("%d\n",cur);
return ;
} for(int i=;i<L;i++){
s[cur]=i;
int ok=;
for(int j=;j*<=cur+;j++){
int equal=;
for(int k=;k<j;k++)
if(s[cur-k]!=s[cur-k-j]){equal=;break;}
if(equal){ok=;break;}//后一半等于前一半,不符合困难的串的条件
}
if(ok) if(!dfs(cur+)) return ;
}
return ;
} int main(){
while(scanf("%d %d",&n,&L)!=EOF&&n&&L){
cnt=;
dfs();
}
return ;
}
加油啊 go---go---go-