/** * File: n_queens.kt * Created Time: 2024-01-25 * Author: curtishd (1023632660@qq.com) */ package chapter_backtracking.n_queens /* Backtracking algorithm: n queens */ fun backtrack( row: Int, n: Int, state: MutableList>, res: MutableList>?>, cols: BooleanArray, diags1: BooleanArray, diags2: BooleanArray ) { // When all rows are placed, record the solution if (row == n) { val copyState = mutableListOf>() for (sRow in state) { copyState.add(sRow.toMutableList()) } res.add(copyState) return } // Traverse all columns for (col in 0..>?> { // Initialize an n*n size chessboard, where 'Q' represents the queen and '#' represents an empty spot val state = mutableListOf>() for (i in 0..() for (j in 0..>?>() backtrack(0, n, state, res, cols, diags1, diags2) return res } /* Driver Code */ fun main() { val n = 4 val res = nQueens(n) println("Input chessboard dimensions as $n") println("Total of ${res.size} queen placement solutions") for (state in res) { println("--------------------") for (row in state!!) { println(row) } } }