/** * 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) } } }