--eight-queen.lua N = 8--棋盘大小 a = {3,7,2,1,8,6,5,4} -- 打印棋盘 function(a) for i=1,N do for j=1,N do io.write(a[i]==j and"X"or"-"," ") end io.write("n") end end
-- 检查当前皇后是否会被攻击,c为列数 functionisplaceok(a,n,c) for i=1,n-1do if (a[i]==c) or--同一列 (a[i]-i == c-n) or--右下对角线 (a[i]+i==c+n) then--左下对角线 returnfalse--遭受攻击 end end returntrue--不会被攻击 end
--添加皇后 functionaddqueen(a,n) if n > N then printsolution(a) os.exit() 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)