Download Taller de Backtracking

Document related concepts
no text concepts found
Transcript
Taller de Backtracking
Introducción a la computación (Matemática)
Agustin Montero
Agustin Montero
Taller de Backtracking
Menú
• Taller de Backtraking
• Ejercicio: ¡Sudoku!
Agustin Montero
Taller de Backtracking
Backtracking
Agustin Montero
Taller de Backtracking
Backtracking
8 reinas
Agustin Montero
Taller de Backtracking
¡Sudoku!
Agustin Montero
Taller de Backtracking
¡Sudoku!
variante: killer sudoku
Agustin Montero
Taller de Backtracking
¡Sudoku!
volviendo al original
Agustin Montero
Taller de Backtracking
¡Sudoku!
volviendo al original
• Ejercicio:
Implementar en Python un programa que resuelva Sudokus
Agustin Montero
Taller de Backtracking
¡Sudoku!
volviendo al original
• Ejercicio:
Implementar en Python un programa que resuelva Sudokus
• Aprovechar la técnica de Backtracking
Agustin Montero
Taller de Backtracking
Implementando Sudoku en Python
main.py
#!/usr/bin/env python
import sys
import time
from TAD_Sudoku import Sudoku
def main():
entrada = open(str(sys.argv[1]),’r’)
sudoku= Sudoku(entrada)
t= time.time()
sudoku.resolver()
t= time.time() - t
sudoku.mostrar()
print "Tiempo total: ", t
main()
Agustin Montero
Taller de Backtracking
Implementando Sudoku en Python
Entradas
sudoku0.txt
2
0
2
0
4
1
0
0
0
0
0
4
0
0
3
0
0
sudoku1.txt
3
0
1
0
0
0
0
5
0
4
6
0
0
0
0
0
0
0
0
5
7
8
0
6
0
0
0
0
0
0
0
2
0
5
0
8
0
3
0
0
0
8
0
0
0
7
0
5
0
1
0
3
0
0
0
0
0
0
0
3
0
6
4
2
0
0
0
0
0
0
0
0
1
7
0
1
0
0
0
0
3
0
Agustin Montero
Taller de Backtracking
Implementando Sudoku en Python
TAD_Sudoku.py
#!/usr/bin/env python
class Sudoku:
def __init__(self, entrada=None):
if entrada is None:
# si no hay entrada, uso uno default
self.tam, self.tabl= Sudoku.__default()
else:
self.tabl = []
self.tam = int(entrada.readline())
n= self.tam**2
for i in range(n):
row= map(int,entrada.readline().split())
self.tabl.append(row)
self.resuelto= self.__esSolucion()
Agustin Montero
Taller de Backtracking
Implementando Sudoku en Python
TAD_Sudoku.py
def mostrar(self)
def resolver(self)
def __esSolucion(self)
def __posicionesLibres(self)
def __backtrack(self, ????? )
• Un detalle más:
python main.py sudoku0.txt
Agustin Montero
Taller de Backtracking
Backtracking podado
8 reinas
Agustin Montero
Taller de Backtracking
Implementando Sudoku en Python
Backtracking + Poda
def mostrar(self)
def resolver(self)
def __esSolucion(self)
def __esFactible(self)
def __backtrack(self, ????? )
Agustin Montero
Taller de Backtracking
Implementando Sudoku en Python
Backtracking + Poda
• Idea:
Agustin Montero
Taller de Backtracking
Para pensar
Problema del caballo
Agustin Montero
Taller de Backtracking
Related documents