#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int a[4][4];
int x[17]= {0},X[17]= {0};
int y[17]= {0},Y[17]= {0};
int d=0,e=-1;
void build()
{
memset(a,0,sizeof(a));
for(int i=0; i<4; i++)
{
for(int j=0; j<4; j++)
{
if(getchar()==‘-‘)
a[i][j]=1;
}
getchar();
}
}
void filp(int s)
{
int x=s/4;
int y=s%4;
for(int i=0; i<4; i++)
a[x][i]=!a[x][i];
for(int j=0; j<4; j++)
a[j][y]=!a[j][y];
a[x][y]=!a[x][y];
}
bool complete()
{
for(int i=0; i<4; i++)
{
for(int j=0; j<4; j++)
{
if(a[i][j]!=1)
return false;
}
}
return true;
}
void dfs(int s,int b)
{
if(complete())
{
if(e<d)
{
for(int i=0; i<d; i++)
{
X[i]=x[i];
Y[i]=y[i];
}
e=d;
}
return;
}
if(s>=16)
return;
dfs(s+1,b);
filp(s);
x[d]=s/4+1;
y[d]=s%4+1;
d++;
dfs(s+1,b+1);
filp(s);
d--;
return;
}
int main()
{
build();
dfs(0,0);
printf("%d\n",e);
for(int i=0; i<e; i++)
printf("%d %d\n",X[i],Y[i]);
return 0;
}
原文:https://www.cnblogs.com/lhsghhqgmzy/p/10686665.html