N-Queens on the Arduino

From dftwiki3
Revision as of 10:38, 20 April 2016 by Thiebaut (talk | contribs) (Created page with "--~~~~ ---- * Make sure you set the baud rate to 9600 in your IDE. * Source: <br /> ::<source lang="C"> // This code taken from // http://www.c4learn.com/c-programs/c-progran...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

--D. Thiebaut (talk) 11:38, 20 April 2016 (EDT)


  • Make sure you set the baud rate to 9600 in your IDE.
  • Source:


// This code taken from 
// http://www.c4learn.com/c-programs/c-progran-to-implement-n-queens-problem.html
// and adapted (minimally) by D. Thiebaut
// Change the variable n in setup() to reflect the number of queens, and run the program.
// Set the baud rate to 9600 in the IDE.
// The program outputs two number in the Serial console:
// n
// ms
// where n is the number of queens, and ms is the elapsed time for the computation of
// the placement of N queens, expressed in milliseconds.

#include<stdio.h>
#include<math.h>

char a[20][20];
int n;

void printmatrix() {
 int i, j;
 return;
 printf("\n");

 for (i = 0; i < n; i++) {
    for (j = 0; j < n; j++)
       printf("%c\t", a[i][j]);
    printf("\n\n");
 }
}

int getmarkedcol(int row) {
 int i;
 for (i = 0; i < n; i++)
    if (a[row][i] == 'Q') {
       return (i);
       break;
    }
}

int feasible(int row, int col) {
 int i, tcol;
 for (i = 0; i < n; i++) {
    tcol = getmarkedcol(i);
    if (col == tcol || abs(row - i) == abs(col - tcol))
       return 0;
 }
 return 1;
}

void nqueen(int row) {
 int i, j;
 if (row < n) {
    for (i = 0; i < n; i++) {
       if (feasible(row, i)) {
          a[row][i] = 'Q';
          nqueen(row + 1);
          a[row][i] = '.';
       }
    }
 } else {
    //Serial.print( F("Done!\n" ) );
 }
}

void setup() {
 int i, j;
 unsigned long StartTime;
 unsigned long CurrentTime;
 unsigned long ElapsedTime;
 Serial.begin( 9600 );

 n=10;
 Serial.print( n );
 Serial.print( F("\n") );
 for (i = 0; i < n; i++)
    for (j = 0; j < n; j++)
       a[i][j] = '.';

 StartTime = millis();
 nqueen(0);
 CurrentTime = millis();
 ElapsedTime = CurrentTime - StartTime;
 Serial.print( ElapsedTime );
}

void loop() {
// put your main code here, to run repeatedly:

}