八皇后问题 - Lua,为什么只输出了5个皇后?

练习2.2:八皇后问题的另一种实现方式是生成1到8的所有可能排列,对于每个排列,检查它是否有效。改变程序以使用这种方法。新程序的性能如何与旧程序相比?(提示:比较排列的总数与原始程序调用函数isplaceok的次数。)

我的代码:

    function isPlaceSafe(board, queen, column)
    for z = 1, queen - 1 do -- i 1, queen - 1 dltg, ze w lua zaczynamy od jedynki
        if (board[z] == column) or  -- 同一列
            -- queen = queen行(Y)
            -- column = queen列(X)
            -- column - board[z] == queen - z
            (queen - z == column - board[z]) or
            (queen - z == board[z] - column) then
            return false
        end
    end
    return true
end

function printSolutions(board)
    for i = 1, N do
        for j = 1, N do
            io.write(board[i] == j and "X"  or "-", " ")
        end
        io.write("\n")
    end
    io.write("\n")
end

--[[
function addQueen(board, number)
    if number > N then
        printSolutions(board)
        os.exit()
    else
        for c = 1, N do
            if (isPlaceSafe(board, number, c)) then
                board[number] = c
                addQueen(board, number + 1)
            end
        end
    end
end

addQueen({}, 1)

--]]
board = {}
function generatePermutations()
    for a = 1, N do -- 行
        for b = 1, N do -- 列
            if isPlaceSafe(board, a, b) then
                board[a] = b
            end

            print(a .. " " .. b)
        end
    end
    printSolutions(board)
end

generatePermutations()

输出结果:

- - - - - - - X
- - - - - X - -
- - - X - - - -
- - - - - - X -
- - - - X - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -

为什么这段代码只停留在5个皇后?

点赞