ZOJ 1984 DFS

View Code
 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<math.h>
 4 #include<string.h>
 5 
 6 char a[5002],b[4]="NOP";
 7 
 8 int ok(int l)
 9 {
10     int i, j;
11    for(i = 0; i < (l+1)/2; i++) 
12    {
13       for(j = 0; j <= i; j++)        
14       {
15         if(a[l-i+j] != a[l-2*i+j-1])
16            break;             
17       }  
18       if(j > i) return 0;
19    }
20    
21    return 1;
22 }
23 
24 int DFS(int k)
25 {
26    int i;  
27    if(k >= 5000) return 1;  
28    for(i=0; i<3; i++)  
29    {
30       a[k] = b[i];          
31       if(!ok(k)) continue;
32       if(DFS(k+1)) return 1;
33    }
34     
35    return 0;  
36 }
37 
38 int main()
39 {
40     int i, n;
41     
42     DFS(0);
43     while(scanf("%d",&n) && n)
44     {
45       for(i = 0; i < n; i++)  
46        printf("%c",a[i]); 
47        
48       printf("\n");
49     }
50     
51     return 0;
52 }   
53     
54     

每个位置有三种可能。。

伪代码:

bool f(判断第i个位置){
    if(i==n){ 输出串;return true; }
    d[4]=“NOP”;
    for(int k=0;k<3;k++){
       if(d[k]加入后符合要求){
           第i位置记录d[k];
            if (f(判断第(i+1)个位置)) return true;          
       }
     }
     return false;
}
 
posted @ 2012-09-02 22:32  zhongya  阅读(219)  评论(0编辑  收藏  举报