回溯算法:八皇后问题
2020-10-27 本文已影响0人
云飞扬1
class EightQueenQuestion {
private val result = Array(8) { -1 }
private var count = 0
fun calcEightQueens(row: Int) {
if (row == 8) {
printQueenMatrix()
return
}
for (i in 0 until 8) {
if (isOk(row, i)) {
result[row] = i
calcEightQueens(row + 1)
}
}
}
private fun isOk(row: Int, column: Int): Boolean {
var leftUp = column - 1
var rightUp = column + 1;
for (i in row - 1 downTo 0) {
if (result[i] == column) {
return false
}
if (leftUp >= 0 && result[i] == leftUp) {
return false
}
if (rightUp < 8 && result[i] == rightUp) {
return false
}
leftUp--
rightUp++
}
return true
}
/**
* 但因当前八皇后矩阵
*/
private fun printQueenMatrix() {
println("=======打印八皇后 ${++count} =======")
for (i in 0 until 8) {
for (j in 0 until 8) {
if (result[i] == j) {
print("Q ")
} else {
print("* ")
}
}
println()
}
}
}
调用执行:
EightQueenQuestion().calcEightQueens(0)