+#include "backtracking.h"
#include "galeshapley.h"
#include "parser.h"
+#include "timer.h"
#include <iostream>
-int main(int argc, char* argv[])
+int
+main(int argc, char* argv[])
{
- if (argc != 2)
+ Susanita* susanita = 0;
+ switch (argc)
{
- std::cerr << "Uso: " << argv[0] << " [archivo_entrada]\n";
- return 1;
+ case 2: //Gale-Sharpley por default
+ // 2N*2 para asegurar que el hash este ocupado al 50%
+ // y sea O(1) (2N porque guarda nombres de mujer y de
+ // hombre y * 2 para que esté ocupado al 50%)
+ susanita = new GaleShapley(Parser::get_n(argv[1]) * 4);
+ break;
+ case 3: // BackTracking se especifica con tercer parámetro "-bt"
+ if (strcmp(argv[2], "-bt"))
+ {
+ std::cerr << "Uso: " << argv[0] << " archivo_entrada [-bt]\n";
+ return 1;
+ }
+ // Ver anterior
+ susanita = new BackTracking (Parser::get_n(argv[1]) * 4);
+ break;
+ default:
+ std::cerr << "Uso: " << argv[0] << " archivo_entrada [-bt]\n";
+ return 2;
}
-
- GaleShapley gs;
- Parser p(gs);
-
+ Parser p(*susanita);
if (!p.input(argv[1]))
{
std::cerr << "Error al abrir el archivo '" << argv[1] << "'\n";
- return 2;
+ delete susanita;
+ return 3;
}
- gs.casamentear();
+ timer t;
+ susanita->casamentear();
p.output();
-}
+ // Todo OK
+ delete susanita;
+ return 0;
+}