local QUEENS_NUM = 8
local queens = {}
for i = 1,QUEENS_NUM do
queens[i] = {}
for j = 1,QUEENS_NUM do
queens[i][j] = 0
end
end
count = 0
function PrintResult()
for i=1,QUEENS_NUM do
for j = 1,QUEENS_NUM do
io.write(queens[i][j].." ")
end
io.write("\n")
end
print("====================================")
end
function CheckValid(row,column)
if row == 1 then
return true
end
-- 检查列
for i=1,row-1 do
if queens[i][column] == 1 then
return false
end
end
local _i = 0
-- 斜向 左上角 和右上角
for i=row-1,1,-1 do
_i = _i + 1
if column - _i >= 1 and queens[i][column-_i] == 1 then
return false
end
if column + _i <= QUEENS_NUM and queens[i][column+_i] == 1 then
return false
end
end
return true
end
function Solve(row)
if row == QUEENS_NUM+1 then
PrintResult()
count = count + 1
return
end
for i=1,QUEENS_NUM do
if CheckValid(row,i) then
queens[row][i] = 1
Solve(row+1)
end
queens[row][i] = 0
end
end
Solve(1)
print("count_result="..count)
总共92种解,感觉到了以前用c学算法的效率低下啊,不过对于学c这种静态语言对于了解程序的底层实现是很有帮助的。所以脚本在性能方面也远不及c,c++等系列语言啦,不过对于实际上的开发效率来说,脚本语言的优势还是大大的