八皇后的n种放置方法
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
addqueen({},1)
博客园 用户登录 代码改变世界 密码登录 短信登录 忘记登录用户名 忘记密码 记住我 登录 第三方登录/注册 没有账户, 立即注册
八皇后的 n种放置方法
八皇后问题是一个以为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到 此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n×n,而 皇后个数也变成n。n = 1或n ≥ 4时问题有解。
-- 打印棋盘 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
-- 皇后的数量 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