Lua实现八皇后问题:
-- 检查(n, c)是否不会被攻击,回溯思想
function isplaceok(a,n,c) --n行,C列
for i=1,n-1 do --在第n行位置,行数迭代,因此需要考虑的是列,正对角线,反对角线
if (a[i]==c)or(a[i]-i==c-n)or(a[i]+i==c+n) then --(a[i]==c)是否同一列,(a[i]-i==c-n)是否同一反对角线,(a[i]+i==c+n)是否同一正对角线
return false --位置会被攻击
end
end
return true --不会被攻击,位置有效
end
function printsolution(a)
printCnt=printCnt+1
for i=1,N do
for j=1,N do
io.write(a[i]==j and "X" or "-"," ") --注意io.write的输出
end
io.write("\n")
end
io.write("\n")
end
function addqueen(a,n)
if n>N then
printsolution(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)