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

原文地址:https://www.cnblogs.com/qijinbiao/p/2181749.html