欢迎来到天天文库
浏览记录
ID:43000178
大小:43.01 KB
页数:7页
时间:2019-09-23
《数独源程序py》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、#!/usr/bin/python#coding=utf-8#sudoku#importrandomclasssudoku(object): def__init__(self): self.col=0 self.row=0 self.num=[iforiinrange(9)] #初始化数独数据 self.sd=[[0forcolumninrange(9)]forrowinrange(9)] defClear(self): """ 清空当前格的数值 """
2、 self.sd[self.row][self.col]=0 defGenSudoku(self): pass defisOK(self,bit): """ 是否满足行、列和3X3区域不重复的要求 """ return(self.checkRow(bit)andself.checkCol(bit)andself.checkNine(bit)) defcheckRow(self,bit): """ 检查行是否符合要求,行没有重复 """ ifb
3、itinself.sd[self.row]: returnFalse returnTrue defcheckCol(self,bit): """ 检查列是否符合要求,列没有重复 """ foriinrange(9): ifbit==self.sd[i][self.col]: returnFalse returnTrue defcheckNine(self,bit): """ 检查3X3区域是否符
4、合要求,区域中没有重复的记录 """ #获得左上角的坐标 i=self.row/3*3 j=self.col/3*3 #横向检查 ifbitinself.sd[i][j:j+3]or bitinself.sd[i+1][j:j+3]or bitinself.sd[i+2][j:j+3]: returnFalse returnTrue defNext(self): """ 下一填充格
5、 """ ifself.col==8: #Debug #print"rownow...",self.row self.row=self.row+1 self.col=0 else: #print"colnow...",self.row,self.col self.col=self.col+1 defPrev(self): """ 上一填充格 """ ifself.col
6、==0: self.row=self.row-1 self.col=8 else: self.col=self.col-1 #清除当前的数字,方便重新填充 self.Clear() defisEnd(self): """ 填充完成 """ return(self.row==9) defgenNum(self): """ 生成随机数字[1-9] """ #初始化数字序列
7、 num=[nforninrange(1,10)] foriinrange(9): #生成随机数字 ranNum=random.choice(num) #检查随机数字合法 if(self.isOK(ranNum)): #返回数字 returnranNum #如没有满足的数字,返回0 return0 defranFix(self): #按照填充格,逐个填充
8、while
此文档下载收益归作者所有