http://acm.pku.edu.cn/JudgeOnline/problem?id=1222

http://acm.pku.edu.cn/JudgeOnline/images/1222_1.jpg

http://acm.pku.edu.cn/JudgeOnline/images/1222_2.jpg

Код:
#include <iostream>
#include <vector>

using namespace std;

vector<vector<int> > board,solved;

void input();
void generate(vector<int> v,int n);
void run(vector<int>);
void print(vector<vector<int> >& v);

int main(){
  int n;
  cin>>n;
  for(int i=0;i<n;i++){
    cout<<"PUZZLE #"<<i+1<<'\n';
    input();
    generate(vector<int>(),0);
    print(solved);
  }
}

void input(){
  board=vector<vector<int> >(5,vector<int>(6));
  for(int i=0;i<board.size();i++)
    for(int j=0;j<board[i].size();j++)
      cin>>board[i][j];
}

void generate(vector<int> v,int n){
  if(n==6){
    run(v);
    return;
  }
  generate(v,n+1);
  v.push_back(n);
  generate(v,n+1);
}

int xx[]={0,0,0,1,-1};
int yy[]={-1,0,1,0,0};

bool good(int x,int y,vector<vector<int> >& v){
  return x>=0 && x<v.size() && y>=0 && y<v[x].size();
}

void press(int x,int y,vector<vector<int> >& v){ 
  for(int i=0;i<5;i++)
    if(good(x+xx[i],y+yy[i],v))
      v[x+xx[i]][y+yy[i]]=!v[x+xx[i]][y+yy[i]];
}

void run(vector<int> v){
  vector<vector<int> > b=board,s(5,vector<int>(6)),e(5,vector<int>(6,0));
  for(int i=0;i<v.size();i++){
    press(0,v[i],b);
    s[0][v[i]]=1;
  }
  for(int i=0;i+1<b.size();i++)
    for(int j=0;j<b[i].size();j++)
      if(b[i][j]){
        press(i+1,j,b);
        s[i+1][j]=1;
      }
  if(b==e) solved=s;
}

void print(vector<int>& v);
void print(vector<vector<int> >& v){
  for(int i=0;i<v.size();i++)
    print(v[i]);
}

void print(vector<int>& v){
  for(int i=0;i+1<v.size();i++) cout<<v[i]<<' ';
  cout<<v.back()<<'\n';
}