jueves, 27 de octubre de 2011

291 - The House Of Santa Claus, uva

#include<iostream>
#include<cstdio>
#include<cstring>
#define db(a) cout << #a << " = " << a << endl
using namespace std;
int matriz[6][6];
int prev12[] = {1, 2, 3, 5};
int prev35[] = {1, 2, 3, 4, 5};
int prev4[]= {3, 5};
void buscar(int res,int deep) {
 if(deep == 8) {
  //printf("%d %d\n",cont++, res);
  printf("%d\n", res);
 }
 else {
  int prev = res % 10;
  if (prev == 1 || prev == 2) {
   for (int i = 0; i < 4; i++) {
    if (!matriz[prev][prev12[i]]) {
     matriz[prev][prev12[i]] = 1;
     matriz[prev12[i]][prev] = 1;
     /*db(prev);
     db2(res * 10 + prev12[i], deep + 1);*/
     buscar(res * 10 + prev12[i], deep + 1);
     matriz[prev][prev12[i]] = 0;
     matriz[prev12[i]][prev] = 0;
    }
   }
  }
  else {
   if (prev == 3 || prev == 5) {
    for (int i = 0; i < 5; i++) {
     if (!matriz[prev][prev35[i]]) {
      matriz[prev][prev35[i]] = 1;
      matriz[prev35[i]][prev] = 1;
      /*db(prev);
      db2(res * 10 + prev35[i], deep + 1);*/
      buscar(res * 10 + prev35[i], deep + 1);
      matriz[prev][prev35[i]] = 0;
      matriz[prev35[i]][prev] = 0;
     }
    }
   }
   else {
    for (int i = 0; i < 2; i++) {
     if (!matriz[prev][prev4[i]]) {
      matriz[prev][prev4[i]] = 1;
      matriz[prev4[i]][prev] = 1;
      /*db(prev);
      db2(res * 10 + prev4[i], deep + 1);*/
      buscar(res * 10 + prev4[i], deep + 1);
      matriz[prev][prev4[i]] = 0;
      matriz[prev4[i]][prev] = 0;
     }
    }
   }
  }
 }
}
int main() {
 memset(matriz, 0, sizeof matriz);
 for (int i = 0; i < 6; i++) matriz[i][i] = 1;
 buscar(1, 0);
 return 0;
}

No hay comentarios:

Publicar un comentario