xiaoguozi's Blog
Pay it forword - 我并不觉的自豪,我所尝试的事情都失败了······习惯原本生活的人不容易改变,就算现状很糟,他们也很难改变,在过程中,他们还是放弃了······他们一放弃,大家就都是输家······让爱传出去,很困难,也无法预料,人们需要更细心的观察别人,要随时注意才能保护别人,因为他们未必知道自己要什么·····

题目意思说用最少的次数翻动使所有的面是白色或黑色:
思路:通过枚举第一行的状态(16种状态),得出答案..
附上code:

 1 #include <iostream>
 
2 #include <string>
 
3 #include <bitset>
 
4 
 
5 using namespace std;
 
6 int map[10][10];
 
7 int opr[10][10];
 
8 int ans,zhen;
 
9 void hanshu(int n)
10 {        
11     for(int i=0;i<16;i++){
12         int cnt=0;
13         bitset<4> bit(i);
14         for(int r=1;r<=4;r++)
15             for(int j=1;j<=4;j++)
16                 opr[r][j]=map[r][j];
17         for(int r=0;r<4;r++){
18             if(bit[r]==1){
19                 cnt++;
20                 opr[1][r+1]^=1;
21                 opr[1][r]^=1;
22                 opr[2][r+1]^=1;
23                 opr[1][r+2]^=1;
24             }
25         }
26         for(int r=2;r<=4;r++){
27             for(int j=1;j<=4;j++){
28                 if(opr[r-1][j]==n){
29                     cnt++;
30                     opr[r-1][j]^=1;
31                     opr[r][j-1]^=1;
32                     opr[r][j]^=1;
33                     opr[r][j+1]^=1;
34                     opr[r+1][j]^=1;
35                 }
36             }
37         }
38         bool prim=false;
39         for(int i=1;i<=4;i++){
40             if(opr[4][i]==n){
41                 prim=true;
42             }
43         }
44         if(!prim&&cnt<ans){
45             zhen=0,ans=cnt;
46         }
47     }
48 }
49 int main()
50 {
51     string ss;
52     while(cin>>ss){
53         ans=0x7fffffff;
54         zhen=-1;
55         memset(map,0,sizeof(map));
56         memset(opr,0,sizeof(opr));
57         for(int i=0;i<ss.size();++i){
58             if(ss[i]=='b')map[1][i+1]=0;
59             else map[1][i+1]=1;
60         }
61         for(int i=2;i<=4;i++){
62             cin>>ss;
63             for(int j=0;j<ss.size();j++){
64                 if(ss[j]=='b')map[i][j+1]=0;
65                 else map[i][j+1]=1;
66             }
67         }
68         hanshu(0);
69         hanshu(1);
70         if(zhen!=-1)cout<<ans<<endl;
71         else cout<<"Impossible"<<endl;
72     }
73     return 0;
74 }
75 
posted on 2008-05-15 20:22 小果子 阅读(599) 评论(0)  编辑 收藏 引用 所属分类: Acm

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理