DFS且记录路径
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
bool handle[5][5] = {false};
int flag, step,r[20],c[20];
bool IsGood(){
for(int i=1; i<=4; i++)
for(int j=1; j<=4; j++)
if(!handle[i][j]) return false;
return true;
}
void change(int x, int y){
for(int i=1; i<=4; i++){
handle[x][i] = !handle[x][i] ;
handle[i][y] = !handle[i][y];
}
handle[x][y] = !handle[x][y];
return;
}
void dfs(int x, int y, int deep){
if(deep == step){
flag = IsGood();
return;
}
if(flag || x == 5) return;
r[deep] = x;
c[deep] = y;
change(x, y);
if(y < 4)
dfs(x, y+1, deep + 1);
else
dfs(x+1, 1, deep + 1);
change(x, y);
if(y < 4)
dfs(x, y+1, deep);
else
dfs(x+1, 1, deep);
return;
}
int main(){
// freopen("in.txt", "r", stdin);
char tmp;
for(int i=1; i<=4; i++)
for(int j=1; j<=4; j++){
cin >> tmp;
if(tmp == '-') handle[i][j] = true;
}
for(step = 0; step <=16; step++){
dfs(1, 1, 0);
if(flag){
break;
}
}
printf("%d\n",step);
for(int i=0; i<step; i++)
printf("%d %d\n",r[i],c[i]);
return 0;
}