项目写了一年的游戏逻辑脚本,发现算法知识有待加强,正好今天1024节日,打算练习下算法,于是查看了经典的把皇后问题,思路是不难,只是发现以前的c语言都不会写了,编译出很多问题,才发现用脚本语言开发的效率和快速,感觉算法这东西重在思想,c语言很多编译的细节错误可能找半天发现才是某个i,j写错了(对于初级的我经常犯这错误),可是用脚本语言就很简单,或者说是很方便查找这个问题,对于编译型语言,有时候因为这个低级错误可能出来的报错信息都够你查个半天。。。最后还是用lua写起来快速实现了
代码语言:javascript复制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 等系列语言啦,不过对于实际上的开发效率来说,脚本语言的优势还是大大的