poj2965
#include <iostream>
using namespace std;
bool map[4][4];
bool record[4][4];//自动初始化为0;
int num;
void init()
{
int i,j;
char ch;
for (i=0;i<4;i++)
{
for (j=0;j<4;j++)
{
cin>>ch;
if (ch=='+')
{
map[i][j]=false;
}
else map[i][j]=true;
}
}
//getchar();
}
bool jianc()
{
int i,j;
num=0;
for (i=0;i<4;i++)
for (j=0;j<4;j++)
if(map[i][j])
num++;
if (num==16)
return true;
else
return false;
}
void output()
{
int i,j;
for (i=0;i<4;i++)
{
for (j=0;j<4;j++)
{
if(record[i][j])
cout<<i+1<<' '<<j+1<<endl;
}
}
}
void press(int ii,int jj)
{
record[ii][jj]=!record[ii][jj];
int i;
map[ii][jj]=!map[ii][jj];
for(i=0;i<4;i++)
{
map[ii][i]=!map[ii][i];
map[i][jj]=!map[i][jj];
}
}
void dfs(int t,int step)
{
if(jianc())//打开了就输出
{
cout<<step<<endl;
output();
exit(0);
return;
}
if(t>=16) return;
dfs(t+1,step);
press(t/4,t%4);
step++;
dfs(t+1,step);
press(t/4,t%4);
step--;
}
int main()
{
init();
dfs(0,0);
return 0;
}