N = 5
--第n个皇后放在第c列上时,是否会与之前已经被放置在数组a中的n-1个皇后发生冲突
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 printsolution(a)
for i = 1, N do
for j = 1, N do
--输出“X”或“-”外加一个空格
io.write(a[i] == j and "X" or "-", " ")
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)
break
end
end
end
end
--2.1 修改程序,使其在计算出第一个解后即停止运行(加一个if后的break即可)
--2.2 排列法解决8皇后问题,实际上很蠢
addqueen({},1)
【lua程序设计(第四版)】第2章练习
最新推荐文章于 2021-03-23 11:09:27 发布