Lua实现八皇后问题

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)

猜你喜欢

转载自blog.csdn.net/a834595603/article/details/90143085
今日推荐