Exemple #1
0
int main()
{
    citire();
    dinamica();
    afis();
    return 0;
}
int main(int argc, char ** argv) 
{
     int ** tablero;
     int dimension;
     char * fichero;
     int filini;
     int colini;
     int algoritmo;
     int tipo_salida;
     par * s;
     int peso;
     int aux; 
     crono c; 

     /* argumentos, alguna primera idea!!!!
      *
      * camino [opciones] fichero
      * -f fila
      * -c columna
      * -[vdb] voraz dinamica backtraking
      * -n N
      * -[am] all info, o minima informacion por pantalla
      *  fichero
      *  
      *  Todos obligatorios! luego tenemos 8 argumentos más el nombre del
      *  programa, tambien damos la opcion a la particula --help
      *  */
     
     if (argc != 10) {
	  return pinta_ayuda();
     }
     
     for (aux = 1; aux < 10; aux++) {
	  if (strcmp(argv[aux], "-f") == 0) {
	       aux++;
	       filini = atoi(argv[aux]);
	  }
	  else if (strcmp(argv[aux], "-c") == 0) {
	       aux++;
	       colini = atoi(argv[aux]);
	  }
	  else if (strcmp(argv[aux], "-n") == 0) {
	       aux++;
	       dimension = atoi(argv[aux]);
	  }
	  else if (strcmp(argv[aux], "-v") == 0) {
	       algoritmo = VORAZ;
	  }
	  else if (strcmp(argv[aux], "-vm") == 0) {
	       algoritmo = VORAZMEJORADO;
	  }
	  else if (strcmp(argv[aux], "-d") == 0) {
	       algoritmo = DINAMICA;
	  }
	  else if (strcmp(argv[aux], "-b") == 0) {
	       algoritmo = BT;
	  }	  
	  else if (strcmp(argv[aux], "-a") == 0) {
	       tipo_salida = ALLINFO;
	  }	  
	  else if (strcmp(argv[aux], "-m") == 0) {
	       tipo_salida = MINIMO;
	  }
	  else {
	       fichero = argv[aux];
	  }
     }
     
     /* aunque no tratemos todas las situaciones, por lo menos hacemos una
      * pequeña comprobacion*/
     if ((filini > dimension) || (colini > dimension)) {
	  fprintf(stderr, "Fila o columna erroneas: fuera del rango\n");
	  return -1;
     }

     tablero = leer_tablero(fichero, dimension);

     if (tablero == NULL) {
	  fprintf(stderr, "ERROR obteniendo el tablero.\n");
	  return -1;
     }
     
     /* reservamos la memoria para s! */
     s = (par *)malloc(MAXNIVEL*sizeof(par));
   
    /* y aplicamos el algoritmo segun la entrada */ 
    switch (algoritmo) {
	  
	 case VORAZ:
	       start_crono(&c);
	       if (voraz(tablero, dimension, filini, colini,&peso, s) == -1) {
		    printf("%d No hay solucion\n", dimension);
		    stop_crono(&c);
		    return -1;
	       }
	       stop_crono(&c);
	       break;
	   
	 case VORAZMEJORADO:
	       start_crono(&c);
	       if (voraz_mejorado(tablero, dimension, filini,
						  colini, &peso, s) == -1) {
		    printf("%d No hay solucion\n", dimension);
		    stop_crono(&c);
		    return -1;
	       }
	       stop_crono(&c);
	       break;
	  
	  case DINAMICA:
	       start_crono(&c);
	       dinamica(tablero, dimension, filini, colini, &peso, s);
	       stop_crono(&c);
	       break;

	  case BT:
	       start_crono(&c);
	       bt(tablero, dimension, filini, colini, &peso, s);
	       stop_crono(&c);
	       break;
	
	  default:
	       ;
     }
    
     if (tipo_salida == ALLINFO) { 
	  pinta_solucion(s, peso, algoritmo, dimension, c);
     }
     else {
	  pinta_solucion_minima(dimension, algoritmo, c);
     }
     
     return 0;
}