龙空技术网

轻松玩转数独,再难的数独也是2s内搞定

骑着鼠标找键盘 55

前言:

今天朋友们对“数独自动生成”都比较关怀,大家都想要知道一些“数独自动生成”的相关文章。那么小编同时在网络上收集了一些对于“数独自动生成””的相关内容,希望我们能喜欢,你们一起来学习一下吧!

什么是数独,数独是在9×9的棋盘上每一行每一列以及每个3×3的九宫格的数字都是独一无二不重复的。

玩数独可以锻炼人的逻辑思维,闲来无事的时候可以玩几把消磨下时间。怎么去玩这个游戏呢,就是通过每一行每一列和九宫格去判断剩余的数字应该是什么,先把确定的格子填上数字,不确定的标上可能的数字,然后从最简单(也就是最少可能性)的格子开始推导。如果想要成为数独大师,就需要大家多总结归纳下,无非多费点时间。

这里我提供了一种方法,可以让你在其他人那显摆下,头条对代码的显示还不是很友好,可以下载后调整下。

下面是Python的代码:

#二维数组,用于输入数独

shudu=[

[0,0,8,0,0,0,2,0,0],

[0,3,0,8,0,2,0,6,0],

[7,0,0,0,9,0,0,0,5],

[0,5,0,0,0,0,0,1,0],

[0,0,4,0,0,0,6,0,0],

[0,2,0,0,0,0,0,7,0],

[4,0,0,0,8,0,0,0,6],

[0,7,0,1,0,3,0,9,0],

[0,0,1,0,0,0,8,0,0]]

#用于判断行、列和九宫格是否唯一

def uniq(m,n,val):

for r in shudu[m]:

if r==val:

return False

for c in shudu:

if c[n]==val:

return False

rx,cx=m//3*3,n//3*3

for i in range(rx,rx+3):

for rc in shudu[i][cx:cx+3]:

if rc==val:

return False

return True

#用于数独的下一个数字选择

def nextc(m,n):

for mmn in range(n+1,9):

if shudu[m][mmn]==0:

return m,mmn

for mn in range(m+1,9):

for nn in range(0,9):

if shudu[mn][nn]==0:

return mn,nn

return -1,-1

#开始一步步往前填入数字,直到判断是唯一的,输出结果

def tryl(m,n):

if shudu[m][n]==0:

for k in range(1,10):

if uniq(m,n,k):

shudu[m][n]=k

nextm,nextn=nextc(m,n)

if nextm==-1 and nextn==-1:

return True

else:

valu=tryl(nextm,nextn)

if not valu:

shudu[m][n]=0

else:

return True

for i in range(9):

for j in range(9):

if shudu[i][j]==0:

break

break

tryl(i,j)

print(shudu)

可以将上述代码拷到Python的编辑器里面,app里面搜索会有很多,下载一个软件拷进去后把shudu的二维数组里面的值改成实际9×9棋盘对应的数字,运行即可生成结果,填入数独游戏软件即可。

这个只是闲暇之余的消遣,建议大家还是实际玩下数独游戏,体会下游戏本身的乐趣。[狗头][狗头]

标签: #数独自动生成