1 #include "galeshapley.h"
18 for (personas_type::iterator ih = hombres.begin();
19 ih != hombres.end(); ++ih)
21 (*ih)->declarar_a(*((*ih)->prefs[0]));
23 for (personas_type::iterator im = mujeres.begin();
24 im != mujeres.end(); ++im)
27 if (m.ofertas.empty())
30 m.comprometer_con(*(m.ofertas.front()));
31 m.ofertas.pop_front();
39 for (personas_type::iterator ih = hombres.begin();
40 ih != hombres.end(); ++ih)
43 if (h.estado == Persona::COMPROMETIDO)
47 for (personas_type::iterator im = h.prefs.begin();
48 im != h.prefs.end(); ++im)
51 if (std::find(h.rechazos.begin(), h.rechazos.end(), pm)
52 != h.rechazos.end()) // Si está
60 for (personas_type::iterator im = mujeres.begin();
61 im != mujeres.end(); ++im)
64 if (m.ofertas.empty())
68 Persona* ph = m.ofertas.front();
69 m.ofertas.pop_front();
70 if (m.estado == Persona::COMPROMETIDO)
72 if (m.cmp(*(m.pareja), *ph) < 0)
74 // la oferta es mejor, rompemos el compromiso
75 m.comprometer_con(*ph);
79 // estamos mejor con nuestra pareja actual, asi
80 // que no hacemos mas que rechazar a todos
81 // (incluyendo el mejor candidato)
82 for (Persona::ofertas_type::iterator i
84 i != m.ofertas.end(); ++i)
85 (*i)->rechazos.push_back(&m);
86 ph->rechazos.push_back(&m);
92 m.comprometer_con(*ph);
99 todos_h_comprometidos() const
101 // FIXME: podemos ver de poner esto adentro de nesima_ronda()
102 for (personas_type::const_iterator ih = hombres.begin();
103 ih != hombres.end(); ++ih)
104 if ((*ih)->estado != Persona::COMPROMETIDO)
111 mostrar_estado() const
113 for (personas_type::const_iterator ih = hombres.begin();
114 ih != hombres.end(); ++ih)
115 std::cout << **ih << "\n";
117 for (personas_type::const_iterator im = mujeres.begin();
118 im != mujeres.end(); ++im)
119 std::cout << **im << "\n";
120 std::cout << "\n" << std::endl;
128 while (!todos_h_comprometidos())