确保行和列都没有重复的数字,算法超简单,穷举所有的可能,速度比较慢
#!/usr/bin/env python
import copy,sys,pdb
ALLDATA=range(1,10)
def printall(val):
for i in val:
for j in i:
print j,' ',
print ''
def getexist(val):
zz = []
for i in val:
if len(i) == 1:
zz.append(i[0])
return zz
def getvnexist(val, n):
zz = []
for i in val:
if len(i[n]) == 1:
zz.append(i[n][0])
return zz
def get_union(v1,v2):
zz=[]
for i in ALLDATA:
if i not in v1 and i not in v2:
zz.append(i)
return zz
def oplist(val):
for i in val:
n = 0
ln_exist = getexist(i)
while n 1:
get_copy = copy.deepcopy(val)
bakj = copy.copy(j)
nn = 0
while nn < lenj:
get_copy[indexi][indexj] = [bakj[nn]]
getit = guess_it(get_copy)
if getit:
return getit
nn += 1
return []
'''
final resault shuld be this:
L1=[[9],[6],[3],[1],[7],[4],[2],[5],[8]]
L2=[[1],[7],[8],[3],[2],[5],[6],[4],[9]]
L3=[[2],[5],[4],[6],[8],[9],[7],[3],[1]]
L4=[[8],[2],[1],[4],[3],[7],[5],[9],[6]]
L5=[[4],[9],[6],[8],[5],[2],[3],[1],[7]]
L6=[[7],[3],[5],[9],[6],[1],[8],[2],[4]]
L7=[[5],[8],[9],[7],[1],[3],[4],[6],[2]]
L8=[[3],[1],[7],[2],[4],[6],[9],[8],[5]]
L9=[[6],[4],[2],[5],[9],[8],[1],[7],[3]]
'''
L1=[[],[],[3],[1],[7],[4],[2],[5],[]]
L2=[[],[],[],[3],[2],[5],[6],[4],[9]]
L3=[[],[5],[4],[6],[],[],[7],[3],[]]
L4=[[],[2],[],[4],[],[7],[5],[9],[6]]
L5=[[],[9],[6],[8],[5],[],[3],[1],[]]
L6=[[],[3],[],[9],[6],[],[8],[2],[4]]
L7=[[],[8],[9],[7],[1],[],[4],[6],[2]]
L8=[[],[1],[7],[2],[],[],[],[8],[]]
L9=[[],[4],[2],[],[9],[8],[1],[7],[]]
Lall = [L1,L2,L3,L4,L5,L6,L7,L8,L9]
#pdb.set_trace()
print 'Before game:'
printall(Lall)
oplist(Lall)
print 'guess...'
Lall = guess_it(Lall)
if Lall:
print 'Success'
printall(Lall)
else:
print 'Failure'
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/4565/showart_50420.html |