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-

你可能感兴趣的:(uva)