码迷,mamicode.com
首页 > 其他好文 > 详细

P2040打开所有的灯

时间:2019-02-10 21:55:01      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:style   开关   输入   i++   its   using   mes   ADG   radius   

例如

0  1  1
1  0  0
1  0  1

点一下最中间的灯【2,2】就变成了

0  0  1
0  1  1
1  1  1

再点一下左上角的灯【1,1】就变成了

1  1  1
1  1  1
1  1  1

达成目标。最少需要2步。

输出2即可。

输入输出格式

输入格式:

 

九个数字,3*3的格式输入,每两个数字中间只有一个空格,表示灯初始的开关状态。(0表示关,1表示开)

 

输出格式:

 

1个整数,表示最少打开所有灯所需要的步数。

 

输入输出样例

输入样例#1: 复制
0 1 1
1 0 0
1 0 1
输出样例#1: 复制
2
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int a[3] [3];
 4 int b[3][3];
 5 int ans=999999;
 6 int main(){
 7     for(int i=0;i<3;i++){
 8         for(int j=0;j<3;j++){
 9             cin>>a[i][j];
10         }
11     }
12     for(int x=0;x<(1<<9);x++){//枚举所有情况 
13         int cnt=0;
14         memset(b,0,sizeof(b));
15         for(int i=0;i<9;i++){
16             if((x>>i)&1==1){//枚举所有可以改变的地方
17                 cnt++;
18                 int p=i%3,q=i/3;
19                 b[p][q]^=1;
20                 if(p!=0)b[p-1][q]^=1;
21                 if(p!=2)b[p+1][q]^=1;
22                 if(q!=0)b[p][q-1]^=1;
23                 if(q!=2)b[p][q+1]^=1;
24             }
25         }
26         bool ok=true;
27         for(int i=0;i<3;i++){//比对改变之后是否可行
28             for(int j=0;j<3;j++){
29                 if((a[i][j]^b[i][j])==0){
30                     ok=false;
31                 }
32             }
33         }
34         if(ok==true){
35             ans=min(ans,cnt);
36         }
37     }
38     cout<<ans;
39 }

 

P2040打开所有的灯

标签:style   开关   输入   i++   its   using   mes   ADG   radius   

原文地址:https://www.cnblogs.com/1129-tangqiyuan/p/10360322.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!