八皇后的n种放置方法

 

八皇后问题

八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n×n,而皇后个数也变成n当且仅当n = 1或n ≥ 4时问题有解[1]

 

-- 皇后的数量
N = 8

-- 判断皇后是否可以放置在棋盘上
function isplaceok(a,n,c)
    for i=1,n-1 do
        if(a[i]==c) or
            (a[i]+i==c+n) or
            (a[i]-i==c-n) then
                return false
            end
        end
    return true
end


-- 打印棋盘
function printsolutions(a)
    for i=1,N do
        for j=1,N do
            io.write(a[i]==j and "q" or "-"," ")
        end
        io.write("\n")
    end
    io.write("\n\n")
end



function addqueen(a,n)
    if n > N then
        printsolutions(a)
    else
        for c = 1, N do
            if(isplaceok(a,n,c)) then
                a[n] = c
                addqueen(a,n+1)
            end
        end
    end
end


addqueen({},1)

 

posted @ 2020-08-06 11:56  iTachiLEe  阅读(759)  评论(0编辑  收藏  举报