Asignación de eventos en Python
Alexis Roda
alexis.roda.villalonga en gmail.com
Mie Jul 23 23:35:58 CEST 2008
En/na Joan Pallarès ha escrit:
> Hola,
>
> Muchas gracias con tu ayuda. Aunque me interesa alguna forma "más elegante"
> de volver atrás"
En backtracking, volver atrás no significa encontrar la solución
"anterior" (que me parece que es lo que quieres) sino retroceder,
deshaciendo el último "cambio" y probando otra posibilidad para
encontrar la "siguiente" solución.
Para lo que (creo que) quieres solo tienes que implementa una clase con
dos metodos, prev y next, una lista que almacene las soluciones
encontradas hasta el momento y el indice de la "solución actual". Si al
llamar a next no quedan "soluciones anteriores" se calcula una nueva
solución y se almacena en la lista.
class Soluciones :
def __init__(self, parejas) :
self._encontrado = []
self._indice = 0
matr = parejasAMatriz(parejas)
self._generador = iter(generaSoluciones(matr))
def next(self) :
if self._indice >= len(self._encontrado) :
self._encontrado.append(list(self._generador.next()))
self._indice += 1
return self._encontrado[self._indice - 1]
def prev(self) :
if self._indice <= 0 :
return None
self._indice -= 1
return self._encontrado[self._indice]
Deberías añadir alguna comprobación extra para el caso que se agoten
todas las soluciones y asegurarte que las comprobaciones que hace son
correctas.
> acabo de usar tu codigo y me escupe esto:
>
> Solucion [0, 1, 2]
> Solucion [0, 1, 3]
> [[1, 1, 1, 1], [1, 1, 1, 0], [1, 1, 1, 1]]
No entiendo de donde sale la última linea. Mi código no imprime la matriz!
> por lo que no hace bactracking, no?
El bucle "while not disponible[fila]" implementa el retroceso: si no
quedan posibilidades para una posición retrocede una posición para
seguir probando.
> te has olvidado algo? o yo me he dejado algo?
Al ejecutarlo me imprime:
[0, 1, 2]
[0, 1, 3]
...
[3, 2, 0]
[3, 2, 1]
Saludos
_______________________________________________
Lista de correo Python-es
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes
Más información sobre la lista de distribución Python-es