原题链接
#include<bits/stdc++.h>
using namespace std;
typedef pair<int, int> PII;
bool myMap[5][5];
void change(int x, int y)
{
for(int i=0;i<4;++i)
myMap[i][y] ^= 1;
for(int j=0;j<4;++j)
myMap[x][j] ^= 1;
myMap[x][y] ^= 1;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
char a;
for(int i=0;i<4;++i)
for(int j=0;j<4;++j)
{
cin>>a;
if(a == '-')
{
myMap[i][j] = 1;
}
}
int _min = INT_MAX;
vector<PII> path;
bool temp[5][5] = {0};
memcpy(temp, myMap, sizeof(myMap));
//k的16位数表示对16个开关操作与否
for(int k = 1; k < 1 << 16; ++k)
{
int cnt = 0;
vector<PII> v;
memcpy(myMap, temp, sizeof(temp));
for(int i=0;i<4;++i)
for(int j=0;j<4;++j)
{
if((k >> 4*i+j) & 1)
{
++cnt;
v.push_back({i, j});
change(i, j);
}
}
bool found = 1;
for(int i=0;i<4;++i)
for(int j=0;j<4;++j)
if(myMap[i][j] == 0)
{
found = false;
break;
}
if(found)
{
_min = min(_min, cnt);
path = v;
}
}
cout<<_min<<'\n';
for(auto x : path)
cout<<x.first + 1<<' '<<x.second + 1<<'\n';
return 0;
}