您的位置:首页 > 其它

poj 2965

2016-01-13 22:00 302 查看
题意:给一个4x4的方格,‘+’符号代表关闭,‘-’符号代表打开,当所有的手柄都为符号‘-’,冰箱门才可以打开,每次对一个点进行操作,与这个点在同一行同一列的点全         部进行状态转变,问将门开打的最少操作次数;

思路:意思就只需要把所有的‘+’符号变成‘-’符号就行了,创建一个bool数组,每次遇到‘+’符号的话将这一行这一列全部进行!操作,最后bool数组中所有为true的坐标     即为要操作的点。

#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
const int sasuke=4;
bool num[5][5];
int main()
{
char str[5][5];
for(int i=1;i<=sasuke;++i){
for(int j=1;j<=sasuke;++j)
str[i][j]=cin.get();
cin.get();
}

for(int j,i=1;i<=sasuke;++i)
for(j=1;j<=sasuke;++j){
if(str[i][j]=='+'){
num[i][j]=!num[i][j];
for(int k=1;k<=sasuke;++k){
num[i][k]=!num[i][k];
num[k][j]=!num[k][j];
}

}
}
int a[20],b[20];int t=0;
int count=0;
for(int i=1;i<=sasuke;++i)
for(int j=1;j<=sasuke;++j)
if(num[i][j]){
++count;a[t]=i;b[t]=j;++t;
}
cout << count << endl;
for(int i=0;i<t;++i)
cout << a[i] << " " << b[i] << endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: