No entiendo. Por lo que lei quieres un programa que dado una instancia de sudoku lo resuelva, esto puede ser posible con ciertos algoritmos.
Pero, cuando vi tu código, vi que tenia interacción con un humano, así que lo quieres es programar el juego de sudoku, lo cual es diferente, por que solo tienes que checar las reglas en cada iteración.
Otra cosa no se por que pusiste los archivo en mediafire si los pudiste poner en el post.
Código Python:
Ver original#Diego Abarca Gaspar
def leermatriz(fichero):
m=[]
f=open(fichero,'r')
for linea in f:
b=linea.split()
for i in range(len(b)):
b[i]=int(b[i])
m.append(b)
f.close()
return m
def escribematriz(fichero):
m=leermatriz(fichero)
t=''
for i in range(len(m)):
for j in range(len(m[i])):
t=t+str(m[i][j])
t=t+''
t=t+'\n'
print t
def esposibleCuadrado1(m,fila,col,num):
esposible=True
filaini=(fila/3)*3
columnaini=(col/3)*3
i=0
j=0
while i<3:
while j<3:
if M[filaini+i][columnaini+j]==num and not i!=j:
esposible=False
j+=1
i+=1
def esposibleFila(m,fila,col,num):
esposible=True
for j in range(len(m[fila])):
if m[fila][j]==num and j==col:
esposible=False
else:
return esposible
def esposibleColumna(m,fila,col,num):
esposible=True
for j in range(len(m[col])):
if m[j][col]==num and j==fila:
esposible=False
else:
return esposible
def EsPosibleCuadrado(m,fila,col,num):
esposible=True
filaIn=(fila/3)*3
colIn=(col/3)*3
for k in range(filaIn,filaIn+3):
for g in range(colIn,colIn+3):
if m[k][g]==num and k==fila and g==col:
esposible=False
else:
return esposible
def copiar(m):
h=[]
for i in range(len(m)):
fila=[]
for j in range(len(m[i])):
fila.append(m[i][j])
h.append(fila)
return h
def esposible(m,fila,col,num):
esposible=True
while esposibleFila(m,fila,col,num)==True and esposibleColumna(m,fila,col,num)==True and EsPosibleCuadrado(m,fila,col,num)==True:
return esposible
else:
esposible=False
def borrar(s,i,j,h):
#borra un numero de una celda no original
if h[i][j]!=0:
print 'la celda es original'
else:
s[i][j]=0
def dibuja(m,h):
p=copiar(h)
solucion=''
solucion=solucion+'**---*---*---**---*---*---**---*---*---**'+'\n'
solucion=solucion+'**---*---*---**---*---*---**---*---*---**'+'\n'
for k in range(len(m)):
for l in range(3):
solucion=solucion+'||'
for t in range(len(m[k])):
for w in range(l*3+1,l*3+4):
if p[k][t]!=0:
solucion=solucion+str(m[k][t])
else:
if esposible(m,k,t,w):
solucion=solucion+str(w)
else:
solucion=solucion+'*'
if (t%3)!=2:
solucion=solucion+'|'
else:
solucion=solucion+'||'
solucion=solucion+'\n'
if (k%3)!=2:
solucion=solucion+'**---*---*---**---*---*---**---*---*---**'+'\n'
else:
solucion=solucion+'**---*---*---**---*---*---**---*---*---**'+'\n'
solucion=solucion+'**---*---*---**---*---*---**---*---*---**'+'\n'
print solucion
def sudoku_main():
fin=False
while not fin:
end=False
print 'Bienvenido'+'\n'+'Elija una de las siguientes opciones: '
print '1.Nuevo shudoku'
print '2.Continuar shudoku'
print '3.Salir'
opcion=raw_input('Elige una opción: ')
if opcion=='3':
fin=True
return 'Adios'
else:
if opcion=='1':
fichero=raw_input('nombre del fichero de sudoku: ')
m=leermatriz(fichero)
escribematriz(fichero)
porg=copiar(m)
elif opcion=='2':
fichero=raw_input('nombre del fichero guardado de sudoku: ')
t=leermatriz(fichero)
porg=copiar(t)
s=copiar(t)
else:
end=True
print '\n'
final=False
while not final:
print '¿Qué desea hacer?'
print '1.Poner numero'
print '2.Borrar numero'
print '3.Guardar shudoku'
print '4.Terminar'
opcion=raw_input('Elige una opción: ')
if opcion=='1':
f=int(raw_input('Fila: '))
col=int(raw_input('Columna: '))
num=int(raw_input('Número: '))
print '\n'
masposibilidades=True
if esposible(m,f,col,num):
m[f][col]=num
else:
print 'No es posible'
if masposibilidades:
dibuja(m,porg)
elif opcion=='2':
f=int(raw_input('Fila'))
col=int(raw_input('Columna'))
print '\n'
borrar(m,f,col,porg)
if masposibilidades:
dibuja(m,porg)
else:
mostrar(m)
elif opcion=='3':
nombre=raw_input('Introduzca el nombre del fichero: ')
f=open(nombre,'w')
for i in range(len(porg)):
for j in range(len(porg[i])):
f.write(str(porg[i][j])+' ')
f.write('\n')
for t in range(len(m)):
for n in range(len(m[t])):
f.write(str(m[t][n])+' ')
f.write('\n')
f.close()
elif opcion=='4':
final=True
win=True
f=0
while f<len(m) and win:
col=0
while col<len(m[f]) and win:
if m[f][col]==0:
win=False
else:
col=col+1
f=f+1
sudoku_main()
Código:
5 0 0 6 0 0 9 0 0
0 0 2 0 0 5 0 0 8
1 9 0 0 0 2 0 0 0
0 0 0 7 0 0 4 0 3
0 0 6 8 0 0 7 0 0
0 1 0 0 2 0 8 5 6
9 0 1 0 3 7 0 8 4
0 8 0 0 0 9 6 0 0
3 0 5 0 0 0 1 0 9