题意:给一个4x4的方格,‘+’符号代表关闭,‘-’符号代表打开,当所有的手柄都为符号‘-’,冰箱门才可以打开,每次对一个点进行操作,与这个点在同一行同一列的点全 部进行状态转变,问将门开打的最少操作次数;
思路:意思就只需要把所有的‘+’符号变成‘-’符号就行了,创建一个bool数组,每次遇到‘+’符号的话将这一行这一列全部进行!操作,最后bool数组中所有为true的坐标 即为要操作的点。
1 #include2 #include 3 #include 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