USACO 1.4.2 The Clocks

深搜4^9次就可以了,不用剪枝就可以过,主要还是要模拟钟表的顺时针变化,代码上注释比较清楚。。所以就不多说了。

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<stdlib.h>
 4 //x数组用于记录九种方法,初始化
 5 int x[11][5]={{0,0,0,0,0},{1,2,4,5,0},{1,2,3,0,0},{2,3,5,6,0},{1,4,7,0,0},{2,4,5,6,8},{3,6,9,0,0},{4,5,7,8,0},{7,8,9,0,0},{5,6,8,9,0}};
 6 int p[11],q[11],first; //p数组用于看改变后的钟表位置,q用于记录初始值
 7 int f[11];  //f记录0,1,2,3的排列,最多每种方法用3次
 8 void cals(int f[])
 9 {
10     int i,j,k,t,ok=0;
11     for(i=1;i<=9;i++)
12     {
13         for(j=0;f[i]&&(j<5)&&(x[i][j]>0);j++)
14         {
15             p[x[i][j]]=(p[x[i][j]]+f[i])%4;  //核心步骤,按要求模拟变换,把3,6,9,12换为1,2,3,0
16         }
17     }
18     for(i=1;i<=9;i++)
19         if(p[i]!=0) {ok=1;break;}  //如果全是12点了,标记已经找到
20     if(!ok)
21     {
22         first=0;
23         for(i=1;i<=9;i++)
24         {
25             if(f[i]!=0)   //按f[i]个数输出i
26             {
27                 for(k=1;k<=f[i];k++)
28                     if(!first)
29                         {first=1;printf("%d",i);}
30                     else printf(" %d",i);
31             }
32         }
33         printf("\n");
34     }
35     else
36     {
37         for(i=1;i<=9;i++)
38             p[i]=q[i]; //q初始化为原来值
39     }
40 }
41 void dfs(int cur)  //4^9次深搜
42 {
43     int i;
44    if(cur>9)
45    {
46        cals(f);
47    }
48    else
49    {
50        for(i=0;i<=3;i++)
51        {
52             f[cur]=i;
53             dfs(cur+1);
54        }
55    }
56 }
57 int main()
58 {
59     freopen("clocks.in","r",stdin);
60     freopen("clocks.out","w",stdout);
61     int i,j,c;
62     for(i=1;i<=9;i++)
63     {
64         scanf("%d",&c);
65         p[i]=(c/3)%4;  //数据简单处理
66         q[i]=p[i];
67     }
68     dfs(1);
69     return 0;
70 }

Executing...

   Test 1: TEST OK [0.054 secs, 2052 KB]

   Test 2: TEST OK [0.054 secs, 2052 KB]

   Test 3: TEST OK [0.054 secs, 2052 KB]

   Test 4: TEST OK [0.032 secs, 2052 KB]

   Test 5: TEST OK [0.054 secs, 2052 KB]

   Test 6: TEST OK [0.054 secs, 2052 KB]

   Test 7: TEST OK [0.065 secs, 2052 KB]

   Test 8: TEST OK [0.043 secs, 2052 KB]

   Test 9: TEST OK [0.054 secs, 2052 KB]

 

All tests OK.

转载于:https://www.cnblogs.com/hjf007/p/3368816.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值