Data update
This commit is contained in:
parent
4bb20c9b71
commit
cbaf4c4b64
12390 changed files with 318560 additions and 27248 deletions
91
Task/N-queens-problem/FutureBasic/n-queens-problem.basic
Normal file
91
Task/N-queens-problem/FutureBasic/n-queens-problem.basic
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
//
|
||||
// N-queens problem solver
|
||||
//
|
||||
// Using FutureBasic 7.0.34
|
||||
// August 2025, R.W.
|
||||
//
|
||||
// Solves 8 queens on 8 x 8 board. You
|
||||
// can adjust the number of queens and
|
||||
// board size in the first two lines.
|
||||
//
|
||||
// Program will calculate the number of solutions.
|
||||
// If the flag "detail" is set to _True, the
|
||||
// placement of the queens would be indicated.
|
||||
|
||||
|
||||
Int BoardSize = 8 // 8x8 board
|
||||
Int board(8, 8) //
|
||||
Int solution = 0 // solution count
|
||||
Boolean detail // whether detailed solution is desired
|
||||
|
||||
// Check if placing a queen at (row, col) is safe
|
||||
|
||||
local fn Safe(row as int, col as int) as Boolean
|
||||
dim i as int, j as int
|
||||
|
||||
// Check column
|
||||
for i = 1 to row - 1
|
||||
if board(i, col) = 1 then exit fn = _false
|
||||
next
|
||||
|
||||
// Check upper-left diagonal
|
||||
i = row - 1 : j = col - 1
|
||||
while (i >= 1) and (j >= 1)
|
||||
if board(i, j) = 1 then exit fn = _false
|
||||
i-- : j--
|
||||
wend
|
||||
|
||||
// Check upper-right diagonal
|
||||
i = row - 1 : j = col + 1
|
||||
while (i >= 1) and (j <= BoardSize)
|
||||
if board(i, j) = 1 then exit fn = _false
|
||||
i-- : j++
|
||||
wend
|
||||
end fn = _True
|
||||
|
||||
// Recursive backtracking solver
|
||||
local fn Solve(row as int, wantDetail as boolean)
|
||||
dim col as int
|
||||
|
||||
if row > BoardSize
|
||||
// Found one solution — print it
|
||||
dim r as int, c as int
|
||||
solution++
|
||||
if wantDetail
|
||||
for r = 1 to BoardSize
|
||||
for c = 1 to BoardSize
|
||||
if board(r, c) == 1
|
||||
print chr$(asc("a") + r - 1); c; " ";
|
||||
end if
|
||||
next
|
||||
next
|
||||
print
|
||||
end if
|
||||
exit fn
|
||||
end if
|
||||
|
||||
for col = 1 to BoardSize
|
||||
if fn Safe(row, col)
|
||||
board(row, col) = 1
|
||||
fn Solve(row + 1,detail)
|
||||
board(row, col) = 0
|
||||
end if
|
||||
next
|
||||
end fn
|
||||
|
||||
window 1,@"N-queens problem"
|
||||
|
||||
detail = _True // we want board placement detail
|
||||
|
||||
if detail
|
||||
print@
|
||||
print @"Detailed placements for chessboard of size ";¬
|
||||
BoardSize; @"x"; BoardSize
|
||||
print@
|
||||
end if
|
||||
|
||||
fn Solve(1,detail)
|
||||
print@
|
||||
print @"There are ";solution;@" solutions for "; BoardSize; @"x"; BoardSize;@" board."
|
||||
|
||||
handleEvents
|
||||
Loading…
Add table
Add a link
Reference in a new issue