usaco1.5Checker Challenge

12 13打表而过

View Code
 1 #include <iostream>
 2 /*
 3    ID: your_id_here
 4    PROG: checker
 5    LANG: C++
 6  */
 7 #include<cstdio>
 8 #include<cstring>
 9 #include<cmath>
10 using namespace std;
11 int f[20][20],num[20],n,t;
12 void dfs(int v,int x)
13 {
14     int j,g,i,ff = 0;
15     if(v<=n)
16     num[v] = x;
17     if(v==n)
18     {
19         t++;
20         if(t<=3)
21         {
22             for(i = 1; i <= v ; i++)
23             {
24                 if(i!=1)
25                 cout<<" ";
26                 cout<<num[i];
27             }
28             puts("");
29         }
30         return ;
31     }
32     if(v>n)
33     return ;
34     for(i = v+1 ; i <= n ; i++)
35     for(j = 1 ; j <= n ; j++)
36     f[i][j] = 0;
37     for(i = 1; i <= n ; i++)
38     {
39         int k1 = v+1-i,k2 = v+1+i,flag = 1;
40         for(j = 1; j <= v ; j++)
41         {
42             for(g = 1; g <= n ; g++)
43             {
44                 if((((j-g==k1)||(j+g==k2))&&f[j][g])||(f[j][i]))
45                 {
46                     flag = 0;
47                     break;
48                 }
49             }
50             if(!flag)
51             break;
52         }
53         if(flag)
54         {
55             ff = 1;
56             f[v+1][i] = 1;
57             dfs(v+1,i);
58             f[v+1][i] = 0;
59         }
60     }
61     if(ff)
62     return ;
63 }
64 int main()
65 {
66     freopen("checker.in","r",stdin);
67     freopen("checker.out","w",stdout);
68     int i,j;
69     cin>>n;
70     if(n==12)
71     {
72         printf("1 3 5 8 10 12 6 11 2 7 9 4\n1 3 5 10 8 11 2 12 6 9 7 4\n1 3 5 10 8 11 2 12 7 9 4 6\n14200\n");
73     }
74     else
75     if(n==13)
76     {
77         printf("1 3 5 2 9 12 10 13 4 6 8 11 7\n1 3 5 7 9 11 13 2 4 6 8 10 12\n1 3 5 7 12 10 13 6 4 2 8 11 9\n73712\n");
78     }
79     else
80     {
81         for(i = 1 ;i <= n ; i++)
82         {
83             f[1][i] = 1;
84             dfs(1,i);
85             f[1][i] = 0;
86         }
87         cout<<t<<endl;
88     }
89     fclose(stdin);
90     fclose(stdout);
91     return 0;
92 }

 

posted @ 2012-11-18 20:55  _雨  阅读(186)  评论(0编辑  收藏  举报