]> git.llucax.com Git - z.facultad/75.29/susanita.git/blob - src/backtracking.h
Hacer que todos_h_comprometidos() sea O(1).
[z.facultad/75.29/susanita.git] / src / backtracking.h
1 #ifndef _BACKTRACKING_H_
2 #define _BACKTRACKING_H_
3
4 #include "persona.h"
5 #include "hashtable.h"
6 #include "susanita.h"
7 #include "parser.h"
8 #include <map>
9 #include <deque>
10 #include <string>
11 #include <algorithm>
12 #include <cassert>
13
14 struct BackTracking : Susanita
15 {
16         /// Constructor
17         BackTracking(size_type capacidad);
18
19         /// Empieza a emparejar gente
20         void casamentear();
21
22         private:
23         
24         /// Llamada recursiva: Ensaya una alternativa con el N-ésimo hombre
25         void Ensayar(personas_type::iterator iH);
26         
27         /// Determina si la pareja es estable
28         bool ParejaEstable(personas_type::iterator Mujer, personas_type::iterator Hombre);
29
30         /// Guarda el resultado cuando llega a resolver el BT, para no perderlo
31         /// en el unwind
32         void GuardarResultado();
33
34         /// Recupera el resultado para poder imprimirlo bien cuando termina.
35         void RecuperarResultado();
36
37         /// Tabla de hash para guardar los resultados
38         HashTable< Persona* > resultado;
39 };
40
41 #endif /* _BACKTRACKING_H_ */