jueves, 15 de diciembre de 2011

750 - 8 Queens Chess Problem , uva

#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstring>
using namespace std;
int x[9], a, b, cont = 0;
bool place(int queen, int row) {
 for (int prev = 1; prev < queen; prev++)
  if (x[prev] == row or abs(x[prev] - row) == abs(prev - queen))
   return false;
 return true;
}
void Nqueen(int queen) {
 if (queen == 9) {
  if (x[b] == a) {
   printf("%2d      %d",++cont, x[1]);
   for (int i = 2; i <= 8; i++) {
    printf(" %d", x[i]);
   }
   puts("");
  }
 }
 else {
  for (int row = 1; row <= 8; row++) {
   if (place(queen, row)) {
    x[queen] = row;
    Nqueen(queen + 1);
   }
  }
 }
}
int main() {
 int t;
 scanf("%d", &t);
 while (t--) {
  scanf("%d %d", &a, &b);
  memset(x, 0, sizeof x);
  cont = 0;
  printf("SOLN       COLUMN\n");
  printf(" #      1 2 3 4 5 6 7 8\n\n");
  Nqueen(1);
  if (t) puts("");
 }
 return 0;
}

No hay comentarios:

Publicar un comentario