题目如题
C++ 代码
#include <iostream>
#include <cstring>
#include <vector>
using namespace std;
typedef pair<int, int> PII;
PII nil = {-1, -1}; // 为矩阵增加的结束位置
char g[4][4];
vector<PII> ans, pos;
void turn(PII pos) {
int x = pos.first, y = pos.second;
for(int i = 0; i < 4; i++) {
g[x][i] == '+' ? g[x][i] = '-' : g[x][i] = '+';
g[i][y] == '+' ? g[i][y] = '-' : g[i][y] = '+';
}
g[x][y] == '+' ? g[x][y] = '-' : g[x][y] = '+';
}
void print(int claim) {
if(claim) {
cout << ans.size() << endl;
for(int i = 0; i < ans.size(); i++)
cout << ans[i].first + 1 << " " << ans[i].second + 1 << endl;
}
}
void dfs(int u) {
if(pos[u] == nil) {
int claim = 1;
for(int i = 0; i < 16; i++) {
if(g[i / 4][i % 4] == '+') {
claim = 0;
break;
}
if(!claim) break;
}
print(claim);
return;
}
dfs(u + 1);
// 给我一个空栈,我还你一个空栈,充满正确答案的栈,如此美好却是一瞬间呀~!
turn(pos[u]), ans.push_back(pos[u]);
dfs(u + 1);
turn(pos[u]), ans.pop_back();
}
int main() {
for(int i = 0; i < 4; i++) cin >> g[i];
for(int i = 0; i < 16; i++) pos.push_back({i / 4, i % 4});
pos.push_back(nil);
dfs(0);
return 0;
}