aboutsummaryrefslogtreecommitdiff
path: root/minic
diff options
context:
space:
mode:
authorQuentin Carbonneaux <[email protected]>2015-10-13 14:30:53 -0400
committerQuentin Carbonneaux <[email protected]>2015-10-13 14:30:53 -0400
commiteee9afb88edd7094adcabc6d111526de983ac5ee (patch)
treedc88a6dbbc9cc2447bae790c7bcc8ad4ab4a2cdb /minic
parent0c7bf521b38a1bfc3b608d135f458d777699772a (diff)
use an array of pointers in queen
Diffstat (limited to 'minic')
-rw-r--r--minic/test/queen.c65
1 files changed, 36 insertions, 29 deletions
diff --git a/minic/test/queen.c b/minic/test/queen.c
index 40c2635..e199189 100644
--- a/minic/test/queen.c
+++ b/minic/test/queen.c
@@ -1,16 +1,17 @@
int printf();
-int *calloc();
+void *calloc();
+int Q;
int N;
-int *t;
+int **t;
print() {
int x;
int y;
- for (y=0; y<8; y++) {
- for (x=0; x<8; x++)
- if (t[x + 8*y])
+ for (y=0; y<Q; y++) {
+ for (x=0; x<Q; x++)
+ if (t[x][y])
printf(" Q");
else
printf(" .");
@@ -23,40 +24,46 @@ chk(int x, int y) {
int i;
int r;
- for (r=i=0; i<8; i++) {
- r = r + t[x + 8*i];
- r = r + t[i + 8*y];
- if (x+i < 8 & y+i < 8)
- r = r + t[x+i + 8*(y+i)];
- if (x+i < 8 & y-i >= 0)
- r = r + t[x+i + 8*(y-i)];
- if (x-i >= 0 & y+i < 8)
- r = r + t[x-i + 8*(y+i)];
+ for (r=i=0; i<Q; i++) {
+ r = r + t[x][i];
+ r = r + t[i][y];
+ if (x+i < Q & y+i < Q)
+ r = r + t[x+i][y+i];
+ if (x+i < Q & y-i >= 0)
+ r = r + t[x+i][y-i];
+ if (x-i >= 0 & y+i < Q)
+ r = r + t[x-i][y+i];
if (x-i >= 0 & y-i >= 0)
- r = r + t[x-i + 8*(y-i)];
+ r = r + t[x-i][y-i];
}
return r;
}
-go(int n, int x, int y) {
- if (n == 8) {
+go(int y) {
+ int x;
+
+ if (y == Q) {
print();
N++;
return 0;
}
- for (; y<8; y++) {
- for (; x<8; x++)
- if (chk(x, y) == 0) {
- t[x + 8*y]++;
- go(n+1, x, y);
- t[x + 8*y]--;
- }
- x = 0;
- }
+ for (x=0; x<Q; x++)
+ if (chk(x, y) == 0) {
+ t[x][y]++;
+ go(y+1);
+ t[x][y]--;
+ }
}
-main() {
- t = calloc(64, sizeof(int));
- go(0, 0, 0);
+main(int ac, void **av) {
+ int i;
+
+ Q = 8;
+ if (ac >= 2)
+ Q = atoi(av[1]);
+ t = calloc(Q, sizeof(int *));
+ for (i=0; i<Q; i++)
+ t[i] = calloc(Q, sizeof(int));
+ go(0);
printf("found %d solutions\n", N);
}