Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jul 20th, 2012  |  syntax: None  |  size: 1.05 KB  |  hits: 12  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define N 8
  5.  
  6. typedef enum boolean_ {
  7.   false = 0,
  8.   true = 1
  9. } boolean;
  10.  
  11. int rev[N] = {N};
  12. int count = 0;
  13.  
  14. void solve(int ord) {
  15.   int i, j;
  16.   boolean field[N] = {false};
  17.   boolean ret;
  18.  
  19. #ifdef DEBUG
  20.   for (j = 0; j < N; j++) {
  21.     printf("%d ", rev[j]);
  22.   }
  23.   printf("\n");
  24. #endif
  25.  
  26.   if (ord >= N) {
  27.     printf("solve: ");
  28.     for (j = 0; j < N; j++) {
  29.       printf("%d ", rev[j]);
  30.       if (rev[j] >= N) {
  31.         printf("fail\n");
  32.         exit(1);
  33.       }
  34.     }
  35.     printf("\n");
  36.     count++;
  37.     return;
  38.   }
  39.  
  40.   for (i = 0; i < ord; i++) {
  41.     if (rev[i] >= 0 && rev[i] < N) {
  42.       field[rev[i]] = true;
  43.     }
  44.     if (rev[i] + (ord-i) >= 0 && rev[i] + (ord-i) < N) {
  45.       field[rev[i] + (ord-i)] = true;
  46.     }
  47.     if (rev[i] - (ord-i)>= 0 && rev[i] - (ord-i)< N) {
  48.       field[rev[i] - (ord-i)] = true;
  49.     }
  50.   }
  51.  
  52.  
  53.   for (j = 0; j < N; j++) {
  54.     if (field[j] == false) {
  55.       rev[ord] = j;
  56.       solve(ord+1);
  57.       rev[ord] = N;
  58.     }
  59.   }
  60.   return;
  61. }
  62.  
  63. int main(void) {
  64.   boolean ret;
  65.  
  66.   solve(0);
  67.   printf("count: %d\n", count);
  68.  
  69.   return 0;
  70. }