谁能帮忙修改下数独随机有bug

--数独原有格式版

--print(B)
local B={}
local C,S={},{}
local g={}
local c,c0,c1,m=0,0,0,0
local t=""
local h={1,2,3,4,5,6,7,8,9}
local d1={{2,2},{5,5},{8,8},{2,5},{2,8},{5,2},{5,8},{8,2},{8,5},}
local d={
  {-1,-1},{-1,0},{-1,1},
  {0,-1},{0,0},{0,1},
  {1,-1},{1,0},{1,1}
  }
--检查,赋值
local function check(i0,j0,c0,B)   
  
 local ii=0
    for ii=1,9 do         
      if B[ii][d1[i0][2]+d[j0][2]]==c0 then  return false
      elseif B[d1[i0][1]+d[j0][1]][ii]==c0 then return false        
      elseif B[d1[i0][1]+d[ii][1]][d1[i0][2]+d[ii][2]]==c0 then return false                      
      end
    end
  return true
end
--清空,随机,赋值
local function add()
 local B={}
  for i=1,9 do B[i]={}
   for j=1,9 do     
   B[i][j]=0
   end
  end
--print("清空")
   for i=1,3 do
     for j=1,9 do
      c=math.random(1,#h)               
      B[d1[i][1]+d[j][1]][d1[i][2]+d[j][2]]=h[c]  
      table.remove(h,c) 
       
     end
   h={1,2,3,4,5,6,7,8,9,}
   end
 
for i=1,9 do t=t.."\n"
  for j=1,9 do
    t=t..B[i][j].." , "
    end
  end

 print("随机:\n"..t)
  for i=4,9 do
    i0=i
   
    for j=1,9 do
      j0=j       
     h={1,2,3,4,5,6,7,8,9} 
      if B[d1[i][1]+d[j][1]][d1[i][2]+d[j][2]]==0 then
       for k=1,9 do
         c=math.random(1,#h)
         c0=h[c]             
         if check(i0,j0,c0,B) then            
           B[d1[i][1]+d[j][1]][d1[i][2]+d[j][2]]=c0
           table.remove(h,c)    
          break
          else 
          k=k-1               
         end
         if  #h==0 and j>=1 then 
           for m=1,j do
           B[d1[i][1]+d[m][1]][d1[i][2]+d[m][2]]=0 
           i=i-1
           j=1 
           break
           end         
         end 
       end                                                                            
     end    
    end
  end
t=""
for i=1,9 do t=t.."\n"
  for j=1,9 do
    t=t..B[i][j].." , "
    end
  end

 print("出题:\n"..t)

end
add()

执行结果有0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值