费解的开关

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int INF=0x3f3f3f3f;
 4 int f[6][6],a[6][6],n;
 5 int dx[]={0,-1,0,0,1};
 6 int dy[]={0,0,-1,1,0};
 7 inline void go(int x,int y)
 8 {
 9     for(int i=0;i<=4;i++)
10     {
11         int xx=x+dx[i];
12         int yy=y+dy[i];
13         if(xx<0||xx>4||yy<0||yy>4) continue;
14         a[xx][yy]^=1;
15     }
16 }
17 int main()
18 {
19     scanf("%d",&n);
20     while(n--)
21     {
22         for(int i=0;i<5;i++)
23             for(int j=0;j<5;j++)
24                 scanf("%1d",&f[i][j]);
25         int ans=INF;
26         for(int i=0;i<32;i++)
27         {    
28             int cnt=0;bool flag=0;    
29             memcpy(a,f,sizeof(f));
30             for(int j=0;j<5;j++) if((i>>j)&1) cnt++,go(0,j);//枚举第一行点击方法 
31             for(int j=0;j<4;j++)
32                 for(int k=0;k<5;k++)
33                     if(!a[j][k]) cnt++,go(j+1,k);
34             for(int j=0;j<5;j++)
35                 for(int k=0;k<5;k++)
36                     if(!a[j][k]) {flag=1;break;}
37             if(!flag) ans=min(ans,cnt);
38         }
39         if(ans==INF||ans>6) printf("%d
",-1);
40         else printf("%d
",ans);
41     }
42     return 0;
43 }
原文地址:https://www.cnblogs.com/yu-xing/p/10163424.html