八皇后问题
八皇后问题是一个以国际象棋为背景的问题:如何能够在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(" ") end io.write(" ") 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)