前言:
今天朋友们对“数独自动生成”都比较关怀,大家都想要知道一些“数独自动生成”的相关文章。那么小编同时在网络上收集了一些对于“数独自动生成””的相关内容,希望我们能喜欢,你们一起来学习一下吧!什么是数独,数独是在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棋盘对应的数字,运行即可生成结果,填入数独游戏软件即可。
这个只是闲暇之余的消遣,建议大家还是实际玩下数独游戏,体会下游戏本身的乐趣。[狗头][狗头]
标签: #数独自动生成