/** * File: n_queens.kt * Created Time: 2024-01-25 * Author: curtishd (1023632660@qq.com) */ package chapter_backtracking.n_queens /* バックトラッキング:N クイーン */ fun backtrack( row: Int, n: Int, state: MutableList>, res: MutableList>?>, cols: BooleanArray, diags1: BooleanArray, diags2: BooleanArray ) { // すべての行への配置が完了したら、解を記録する if (row == n) { val copyState = mutableListOf>() for (sRow in state) { copyState.add(sRow.toMutableList()) } res.add(copyState) return } // すべての列を走査 for (col in 0..>?> { // n*n の盤面を初期化する。'Q' はクイーン、'#' は空きマスを表す 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("入力された盤面の縦横は $n") println("クイーンの配置パターンは全部で ${res.size} 通り") for (state in res) { println("--------------------") for (row in state!!) { println(row) } } }