【发布时间】:2019-11-24 17:32:05
【问题描述】:
我正忙于阅读 lua 第 4 版书中的编程,而我正在努力阅读第二章。该程序实质上打印了一个带有 8 个皇后的棋盘,它们的放置方式使它们都不能互相攻击。我正在努力弄清楚为什么它会多次打印电路板。
我已经一步一步地检查了代码,一旦打印解决方案完成了第一块板的打印,我认为它会结束函数然后跳回主程序,但由于某种原因它一直在循环。我对 lua 也很陌生,刚从 C 语言学习,所以还习惯了。
它输出的其中一个板的图像。 X 是皇后 - https://ibb.co/KsT3R8X
N = 8 -- board size
-- check whether position (n,c) is free from attacks
function isplaceok (a, n, c)
for i = 1, n - 1 do -- for each queen already placed
if (a[i] == c) or -- same column?
(a[i] - i == c - n) or -- same diagonal?
(a[i] + i == c + n) then -- same diagonal?
return false -- place can be attacked
end
end
return true -- no attacks; place is OK
end
-- print a board
function printsolution (a)
for i = 1, N do -- for each row
for j = 1, N do -- and for each column
-- write "X" or "-" plus a space
io.write(a[i] == j and "X" or "-", " ")
end
io.write("\n")
end
io.write("\n")
end
-- add to board 'a' all queens from 'n' to 'N'
function addqueen (a, n)
if n > N then -- all queens have been placed?
printsolution(a)
else -- try to place n-th queen
for c = 1, N do
if isplaceok(a, n, c) then
a[n] = c -- place n-th queen at column 'c'
addqueen(a, n + 1)
end
end
end
end
-- run the program
addqueen({}, 1)
【问题讨论】:
-
您能否将代码复制/粘贴到您的问题正文中。这使人们更容易将其放入调试环境中。如果他们必须从图像中编写代码,这通常意味着您将获得更少的参与度和扩展答案。
-
抱歉,我会粘贴它。我没有这样做的唯一原因是,当我从 pdf 中复制它时,它看起来不那么整洁。
-
我添加了代码