1. 程式人生 > 實用技巧 >八皇后的n种放置方法

八皇后的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)