資源描述:
《數(shù)獨(dú)源程序py》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、#!/usr/bin/python#coding=utf-8#sudoku#importrandomclasssudoku(object):???def__init__(self):???????self.col=0???????self.row=0???????self.num=[iforiinrange(9)]???????#初始化數(shù)獨(dú)數(shù)據(jù)???????self.sd=[[0forcolumninrange(9)]forrowinrange(9)]???defClear(self):???????"""???????清空當(dāng)前格的數(shù)值???????"""????
2、???self.sd[self.row][self.col]=0???defGenSudoku(self):???????pass???defisOK(self,bit):???????"""???????是否滿足行、列和3X3區(qū)域不重復(fù)的要求???????"""???????return(self.checkRow(bit)andself.checkCol(bit)andself.checkNine(bit))???defcheckRow(self,bit):???????"""???????檢查行是否符合要求,行沒有重復(fù)???????"""???????ifb
3、itinself.sd[self.row]:???????????returnFalse???????returnTrue???defcheckCol(self,bit):???????"""???????檢查列是否符合要求,列沒有重復(fù)???????"""???????foriinrange(9):???????????ifbit==self.sd[i][self.col]:???????????????returnFalse???????returnTrue???defcheckNine(self,bit):???????"""???????檢查3X3區(qū)域是否符
4、合要求,區(qū)域中沒有重復(fù)的記錄???????"""???????#獲得左上角的坐標(biāo)???????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???????#清除當(dāng)前的數(shù)字,方便重新填充???????self.Clear()???defisEnd(self):???????"""???????填充完成???????"""???????return(self.row==9)???defgenNum(self):???????"""???????生成隨機(jī)數(shù)字[1-9]???????"""???????#初始化數(shù)字序列
7、???????num=[nforninrange(1,10)]???????foriinrange(9):???????????#生成隨機(jī)數(shù)字???????????ranNum=random.choice(num)???????????#檢查隨機(jī)數(shù)字合法???????????if(self.isOK(ranNum)):???????????????#返回?cái)?shù)字???????????????returnranNum???????#如沒有滿足的數(shù)字,返回0???????return0???defranFix(self):???????#按照填充格,逐個(gè)填充???????
8、while