Home
       0041-queen.c - scc - simple c99 compiler
  HTML git clone git://git.simple-cc.org/scc
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
   DIR README
   DIR LICENSE
       ---
       0041-queen.c (1148B)
       ---
            1 int *calloc(int, int);
            2 
            3 int N;
            4 int *t;
            5 
            6 int
            7 chk(int x, int y)
            8 {
            9         int i;
           10         int r;
           11 
           12         for (r=i=0; i<8; i++) {
           13                 r = r + t[x + 8*i];
           14                 r = r + t[i + 8*y];
           15                 if (x+i < 8 & y+i < 8)
           16                         r = r + t[x+i + 8*(y+i)];
           17                 if (x+i < 8 & y-i >= 0)
           18                         r = r + t[x+i + 8*(y-i)];
           19                 if (x-i >= 0 & y+i < 8)
           20                         r = r + t[x-i + 8*(y+i)];
           21                 if (x-i >= 0 & y-i >= 0)
           22                         r = r + t[x-i + 8*(y-i)];
           23         }
           24         return r;
           25 }
           26 
           27 int
           28 go(int n, int x, int y)
           29 {
           30         if (n == 8) {
           31                 N++;
           32                 return 0;
           33         }
           34         for (; y<8; y++) {
           35                 for (; x<8; x++)
           36                         if (chk(x, y) == 0) {
           37                                 t[x + 8*y]++;
           38                                 go(n+1, x, y);
           39                                 t[x + 8*y]--;
           40                         }
           41                 x = 0;
           42         }
           43         return 0;
           44 }
           45 
           46 int
           47 main()
           48 {
           49         t = calloc(64, sizeof(int));
           50         go(0, 0, 0);
           51         if(N != 92)
           52                 return 1;
           53         return 0;
           54 }
           55