首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

python解码数独游戏

数独游戏一般是9乘9的数字矩阵,每一行、每一列都不重复的出现1到9。整个区域又划分成9个3乘3的小九宫格,每个小九宫格也是1到9的数字各出现1次。

对于每一个未知格点数字的猜测,可从行、列、块三个方向上各剩余哪些数字没有出现,分别在这三个方向生成数字集合,三个集合的交集就减少了一些不错误的数字,如果这个集合只剩下一个数字,那这个格点的值就确定下来了。将确定的数字填入格点,重复此过程,解出所有数字。

def show(g): #显示结果 for j in range(0,9): for i in range(0,9): print(g[j][i],end=' ') print()

def guess(r,c): #获取r行c列可能的数字集 #x,y,z分别获取行、列、块三个方向剩余数字集合 if(grid[r][c] in ABC): return () x=ABC-set(grid[r]) y=ABC-set([p[c] for p in grid]) z=ABC-set(gblock(r,c))

d=x.intersection (y).intersection (z) return(d) def gblock(r,c): #获取r行c列所在子九宫格内剩余数字 a=r//3*3 b=c//3*3 p=[grid[j][i] for j in range(a,a+3) for i in range(b,b+3)] return set(p)

def unlock(): #扫描所有格点 for j in range(0,9): for i in range(0,9): d=guess(j,i) if len(d)==1: #print(f'Row:{j} Col:{i} ={d}') grid[j][i]=list(d)[0] show(grid) s="""-6--5-7---718-2563-9-6-381------96-16----4-751-4---982-169-7-5--48-3---7----4823-"""t=s.split()ABC=set(list('123456789'))grid=[list(x) for x in t]show(grid)

‍‍‍

将游戏中出现的数字按行列写成字符串形式,如第一行应写成"-------9-",减号表示此处没有数字,需要计算的。程序按F5运行,在交互模式下,输入unlock(),每输入一次,就解锁更多数字。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20210106A04C2J00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券