我真的需要尝试如何从现有代码创建GUI。 我不知道如何开始。 我现有的代码在控制台日志中创建了一个8x8的文本,其中数字1等于2,可以解决8个皇后难题。 (1是皇后区2是占位符) 实际使用8个TableRows创建了一个GridLayout,其中包含8个ImageView。
fun main() {
val board2D = Array(8) { IntArray(8) }
computeQueens(board2D, xQueen = 0, yQueen = 0, numberOfQueens = 0)
}
fun printBoardState(board2D: Array<IntArray>) {
for (y in 0..7) {
for (x in 0..7) {
print("${board2D[y][x]} ")
}
println()
}
println()
}
fun putQueen(board: Array<IntArray>, xQueen: Int, yQueen: Int) {
for (x in 0..7) {
board[yQueen][x] = 2
for (y in 0..7) {
board[y][xQueen] = 2
}
}
for (xD in 0..7) {
for (yD in 0..7) {
val diagoX = xQueen - xD //Diagonal oben links unten rechts
val diagoY = yQueen - yD //Diagonal oben links unten rechts
val diago = diagoX + diagoY //Diagonal unten links oben rechts
if (diagoX == diagoY) {
board[yD][xD] = 2
}
if (diago == 0) {
board[yD][xD] = 2
}
}
}
board[yQueen][xQueen] = 1
}
fun getBoardCopy(board: Array<IntArray>): Array<IntArray> {
return board.map {
it.copyOf()
}.toTypedArray()
}
fun computeQueens(
board2D: Array<IntArray>,
xQueen: Int,
yQueen: Int,
numberOfQueens: Int
): Boolean {
if (numberOfQueens == 8) {
printBoardState(board2D)
return true
}
var tempXQueen = xQueen
for (y in yQueen..7) {
for (x in tempXQueen..7) {
if (board2D[y][x] == 0) {
val board2DCopy = getBoardCopy(board2D)
putQueen(board2DCopy, x, y)
val isSuccess = computeQueens(board2DCopy, x, y, numberOfQueens + 1)
if (isSuccess) {
return true
}
}
}
tempXQueen = 0
}
return false
}
我的实际GUI图片: