[//]: # DFS方法 函数编程
C++ 代码
#include <bits/stdc++.h>
using namespace std;
char s[10][10];
bool vis[10][10];
int sum = 20;
vector<pair<int, int> > ans, temp;
void turn(int x, int y)
{
for (int i = 0; i < 4; i++)
s[x][i] == '+' ? s[x][i] = '-' : s[x][i] = '+';
for (int i = 0; i < 4; i++)
{
if (i == x)
continue;
s[i][y] == '+' ? s[i][y] = '-' : s[i][y] = '+';
}
}
bool cmp(pair<int, int> a, pair<int, int> b)
{
if (a.first < b.first)
return true;
if (a.first > b.first)
return false;
if (a.second < b.second)
return true;
if (a.second > b.second)
return false;
}
bool check()
{
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
if (s[i][j] == '+')
return false;
}
}
return true;
}
void dfs(int root)
{
if (root > 16 || root >= sum)
return;
if (check())
{
sum = min(sum, (int)temp.size());
sort(temp.begin(), temp.end(), cmp);
ans.clear();
ans.assign(temp.begin(), temp.end());
return;
}
turn(root / 4, root % 4);
temp.push_back({root / 4 + 1, root % 4 + 1});
dfs(root + 1); //此处翻转
temp.pop_back();
turn(root / 4, root % 4);
dfs(root + 1); //此处不翻转
}
int main()
{
for (int i = 0; i < 4; i++)
cin >> s[i];
dfs(0);
cout << sum << '\n';
for (int i = 0; i < ans.size(); i++)
{
cout << ans[i].first << " " << ans[i].second << "\n";
}
return 0;
}