题意:给一个4x4的方格,‘+’符号代表关闭,‘-’符号代表打开,当所有的手柄都为符号‘-’,冰箱门才可以打开,每次对一个点进行操作,与这个点在同一行同一列的点全 部进行状态转变,问将门开打的最少操作次数;
思路:意思就只需要把所有的‘+’符号变成‘-’符号就行了,创建一个bool数组,每次遇到‘+’符号的话将这一行这一列全部进行!操作,最后bool数组中所有为true的坐标 即为要操作的点。
1 #include<iostream> 2 #include<cstring> 3 #include<cmath> 4 using namespace std; 5 const int sasuke=4; 6 bool num[5][5]; 7 int main() 8 { 9 char str[5][5]; 10 for(int i=1;i<=sasuke;++i){ 11 for(int j=1;j<=sasuke;++j) 12 str[i][j]=cin.get(); 13 cin.get(); 14 } 15 16 17 for(int j,i=1;i<=sasuke;++i) 18 for(j=1;j<=sasuke;++j){ 19 if(str[i][j]=='+'){ 20 num[i][j]=!num[i][j]; 21 for(int k=1;k<=sasuke;++k){ 22 num[i][k]=!num[i][k]; 23 num[k][j]=!num[k][j]; 24 } 25 26 } 27 } 28 int a[20],b[20];int t=0; 29 int count=0; 30 for(int i=1;i<=sasuke;++i) 31 for(int j=1;j<=sasuke;++j) 32 if(num[i][j]){ 33 ++count;a[t]=i;b[t]=j;++t; 34 } 35 cout << count << endl; 36 for(int i=0;i<t;++i) 37 cout << a[i] << " " << b[i] << endl; 38 }