poj2965
#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; }