RosettaCodeData/Task/N-queens-problem/V-(Vlang)/n-queens-problem.v
2026-04-30 12:34:36 -04:00

39 lines
864 B
V

import math
struct NQueensSolver {
mut:
count int
cnr []int
fsg string
}
fn (mut solver NQueensSolver) n_queens(row int, num int) {
outer:
for xal in 1 .. num + 1 {
for yal in 1 .. row {
if solver.cnr[yal] == xal { continue outer }
if row - yal == math.abs(xal - solver.cnr[yal]) { continue outer }
}
solver.cnr[row] = xal
if row < num { solver.n_queens(row + 1, num) }
else {
solver.count++
if solver.count == 1 { solver.fsg = solver.cnr[1..].map(it - 1).str() }
}
}
}
fn main() {
for nal in 1 .. 15 {
mut solver := NQueensSolver{
count: 0
cnr: []int{len: nal + 1}
fsg: ""
}
solver.n_queens(1, nal)
println("For a $nal x $nal board:")
println(" Solutions = $solver.count")
if solver.count > 0 { println(" First is $solver.fsg") }
println("")
}
}