User Tools

Site Tools


the_eight_queens_solver

This is an old revision of the document!


/* The eight queens solver */

int main(string[] args) {
  int N;
  int[] row, col, diag1, diag2;
  
  N = 8;
  row = new int[N];
  col = new int[N];
  diag1 = new int[N+N-1];
  diag2 = new int[N+N-1];
  
  fill(row, 0);
  fill(col, 0);
  fill(diag1, 0);
  fill(diag2, 0);
  
  try(N, row, col, diag1, diag2, 0);
  
  return 0;
}

int fill(int[] a, int v) {
  int i;
  
  for (i = 0; i < a.length; i = i+1) {
    a[i] = v;
  }
  return 0;
}

int printBoard(int[] col) {
  int i, j;
  
  for (i = 0; i < col.length; i = i+1) {
    for (j = 0; j < col.length; j = j+1) {
      if (col[i] == j) {
        printString(" O");
      } else {
        printString(" .");
      }
    }
    printLine("");
  }
  printLine("");
  return 0;
}

int try(int N, int[] row, int[] col, int[] diag1, int[] diag2, int c) {
  int r;
  
  if (c == N) {
    printBoard(col);
  } else {
    for (r = 0; r < N; r = r+1) {
      if (row[r] == 0 && diag1[r+c] == 0 && diag2[r+N-1-c] == 0) {
        row[r] = 1;
        diag1[r+c] = 1;
        diag2[r+N-1-c] = 1;
        col[c] = r;
        try(N, row, col, diag1, diag2, c+1);
        row[r] = 0;
        diag1[r+c] = 0;
        diag2[r+N-1-c] = 0;
      }
    }
  }
  return 0;
}
the_eight_queens_solver.1329809048.txt.gz · Last modified: 2012/02/21 07:24 by xjia

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki