def queens_collide?(i, j, col, diag_plus, diag_minus) col.include?(j) diag_plus.include?(i + j) diag_minus.include?(i - j) end def place_queens(n, i, j, col, diag_plus, diag_minus) if i.zero? col elsif j.zero? false elsif queens_collide?(i, j, col, diag_plus, diag_minus) place_queens(n, i, j - 1, col, diag_plus, diag_minus) else queen_placed_ok = place_queens( n, i - 1, n, col + [j], diag_plus + [i + j], diag_minus + [i - j] ) if queen_placed_ok queen_placed_ok else place_queens(n, i, j - 1, col, diag_plus, diag_minus) end end end def queens(n) place_queens(n, n, n, [], [], []) end puts queens(4).inspect # >> [3, 1, 4, 2]
The code is below and i should also explain the algorithm. Well, What we are doing here is that we already defined the size to be 9x9 sudoku and are getting values using loops. All the empty spots are given UNASSIGNED value. Then we have functions to tell that if it is safe to put a value in the empty box by calculation and according to the rules of Sudoku it checks for is there any other some number horizontally and vertically and do the sum of the row and column is less than or equal to required or not. If the functions returns true then the program puts the value there.#include #define UNASSIGNED 0#define N 9bool FindUnassignedLocation(int grid[N][N], int &row, int &col);bool isSafe(int grid[N][N], int row, int col, int num);bool SolveSudoku(int grid[N][N]){int row, col;if (!FindUnassignedLocation(grid, row, col))return true; // success!for (int num = 1; num
Natty Boh, National Boh or just Boh.
boh boh heh to teh?
jao boh hak koh boh...........
Katja Boh died in 2008.
Katja Boh was born in 1929.
#include<stdio.h> unsigned sum_row (unsigned* sq, const unsigned width, const unsigned row) { unsigned sum, col; sum = 0; for (col=0; col<width; ++col) sum += sq[row*width+col]; return sum; } unsigned sum_col (unsigned* sq, const unsigned width, const unsigned col) { unsigned sum, row; sum = 0; for (row=0; row<width; ++row) sum += sq[row*width+col]; return sum; } unsigned sum_diag (unsigned* sq, const unsigned width) { unsigned sum, row, col; sum = 0; for (row=0, col=0; row<width; ++row, ++col) sum += sq[row*width+col]; return sum; } unsigned sum_anti (unsigned* sq, const unsigned width) { unsigned sum, row, col; sum = 0; for (row=0, col=width-1; row<width; ++row, --col) sum += sq[row*width+col]; return sum; } bool is_magic (unsigned* sq, const unsigned width) { unsigned magic, row, col; magic = sum_row (sq, width, 0); for (row=1; row<width; ++row) if (magic!=sum_row(sq, width, row)) return false; for (col=0; col<width; ++col) if (magic!=sum_col(sq, width, col)) return false; if (magic!=sum_diag(sq, width)) return false; if (magic!=sum_anti(sq, width)) return false; return true; } int main () { const unsigned width = 3; unsigned a[width][width] {{2,7,6},{9,5,1},{4,3,8}}; unsigned row, col; printf ("Square:\n\n"); for (row=0; row<width; ++row) { for (col=0; col<width; ++col) { printf ("%d ", a[row][col]); } printf ("\n"); } printf ("\n"); if (is_magic((unsigned*)&a, width)) printf ("The square is magic with a magic constant of %d\n", sum_row((unsigned*)&a, 3,0)); else printf ("The square is not magic\n"); return 0; }
Marilyn Boh has written: 'Go organize!'
Rick Boh was born on 1964-05-18.
Alex Kinvi-Boh was born on 1991-12-20.
Maja Boh was born on June 4, 1949, in Ljubljana, Slovenia.