八皇后的n种放置方法
阿新 • • 發佈:2020-08-06
八皇后問題
八皇后問題是一個以國際象棋為背景的問題:如何能夠在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)