和之前做的poj1753一样的套路
#include <cstdio>
int matrix[4][4] = {0};
int openFlag = 1;
int step;
bool flag;
int rowN[16],colN[16];
bool judge()
{
for(int i = 0; i < 4; ++i)
{
for(int j = 0; j < 4; ++j)
{
if(matrix[i][j] != openFlag)
return false;
}
}
return true;
}
void flip(int row, int col)
{
matrix[row][col] ^= 1;
for(int i = 0; i < 4; ++i)
{
matrix[row][i] ^= 1;
matrix[i][col] ^= 1;
}
}
void dfs(int row, int col, int depth)
{
if(depth == step)
{
flag = judge();
return;
}
if(flag || row == 4) return;
rowN[depth] = row;
colN[depth] = col;
flip(row,col);
if(col < 3)
dfs(row,col+1,depth+1);
else
dfs(row+1,0,depth+1);
flip(row,col);
if(col < 3)
dfs(row,col+1,depth);
else
dfs(row+1,0,depth);
}
int main()
{
char ch;
for(int i = 0; i < 4; ++i)
{
for(int j = 0; j < 4; ++j)
{
scanf(" %c",&ch);
if(ch == '-') matrix[i][j] = 1;
}
}
for(step = 0; step <= 16; ++step)
{
dfs(0,0,0);
if(flag) break;
}
printf("%d\n",step);
for(int i = 0; i < step; ++i)
printf("%d %d\n",rowN[i]+1,colN[i]+1);
return 0;
}