UVa 129 Krypton Factor【回溯】

学习的紫书的回溯,理解起来还是好困难的说啊= =

 1 #include<iostream>  
 2 #include<cstdio>  
 3 #include<cstring> 
 4 #include <cmath> 
 5 #include<stack>
 6 #include<vector>
 7 #include<map> 
 8 #include<set>
 9 #include<queue> 
10 #include<algorithm>  
11 using namespace std;
12 
13 typedef long long LL;
14 const int INF = (1<<30)-1;
15 const int mod=1000000007;
16 const int maxn=100005;
17 
18 char s[maxn];
19 int n,L,cnt,sum;
20 
21 int dfs(int cur){
22     if(cnt++==n){
23         int tmp=0;
24         for(int i=0;i<cur;i++) {        
25             if(i%64==0&&i) printf("\n");
26             else if(i%4==0&&i) printf(" ");
27             printf("%c",'A'+s[i]);
28         }
29         printf("\n");
30         printf("%d\n",cur);
31         return 0;
32     }
33     
34     
35     for(int i=0;i<L;i++){
36         s[cur]=i;
37         int ok=1;
38         for(int j=1;j*2<=cur+1;j++){
39             int equal=1;
40             for(int k=0;k<j;k++)
41             if(s[cur-k]!=s[cur-k-j]){equal=0;break;}        
42             if(equal){ok=0;break;}//后一半等于前一半,不符合困难的串的条件 
43         }
44         if(ok) if(!dfs(cur+1)) return 0;
45     }
46     return 1;
47 }
48 
49 
50 int main(){
51     while(scanf("%d %d",&n,&L)!=EOF&&n&&L){
52         cnt=0;
53         dfs(0);
54     }
55     return 0;
56 }
View Code

 

 

 

 

 

 

 

 

 

 

 

 

 

加油啊 go---go---go-

posted @ 2015-04-21 20:50  sequenceaa  阅读(132)  评论(0编辑  收藏  举报