示例#1
0
文件: main.c 项目: ericzucho/tc2025
void ordena(int * numeros, int criterio(int, int))
{
    int i, j, temp;
    
    for(i = 0; i < N; ++i)
    {
        for(j = N-1; j > i; --j)
        {
            if (criterio(numeros[j],numeros[j-1])) {
                temp = numeros[j-1];
                numeros[j-1] = numeros[j];
                numeros[j] = temp;
            }
        }
    }
}
void ordenamela(char *palabra, char criterio(char, char), int lon)
{
  int i, j;
  char temp;

  for(i = 0;  i < lon; ++i)
  {
    for(j = lon-1; j > i; --j)
    {
      if(criterio(palabra[j], palabra[j-1]))
      {
        temp = palabra[j-1];
        palabra[j-1] = palabra[j];
        palabra[j] = temp;
      }
    }
  }
}
示例#3
0
int bt(int ** tablero, int dimension, int filini, int colini,
	  int * peso_solucion, par * soa)
{
     /* primero todas las variables que necesitamos!!!!!!!!!!
      * PXS
      * sandrita, se me va la cabeza :$ por ti! */

     /* como la solucion final estara en soa, en vez de considerar
      * el parametro de la funcion como s, lo consideramos como soa */
     par * s;
     int ** recorridos;
     par * paresmov;
     int voa;
     int peso;
     int nivel;
     int * mov; 
     int i;

     /* procedemos a inicilizar todas las variables que hemos declarado */
     /* memoria para s y soa */
     s = (par *)malloc(MAXNIVEL*sizeof(par));

     /* vamos a inicializar estas dos variables anterios, cada par tendra
      * el valor de (-1,-1) */
     inicializa_pares(s, -1, dimension);
     inicializa_pares(soa, -1, dimension);
     
     /* y la de movimientos! que son inicializados a -1 */
     mov = (int *)malloc(MAXNIVEL*sizeof(int));
     for (i = 0; i < MAXNIVEL; i++) {
	  mov[i] = -1;
     }
	  

     /* creamos el array que tiene codificados los 4 movimientos */ 
     paresmov = (par *)malloc(3*sizeof(par));
     inicializa_paresmov(paresmov);
     
     /* tambien inicializamos recorridos */
     recorridos = inicializa_matriz(dimension, 0);
    
     /* inicializacion de las variables! */
     voa = 0xffff;
     recorridos[filini][colini] = 1;
     s[0].f = filini; 
     s[0].c = colini;
    
     nivel = 0;

     /* peso almacena el peso del camino que vamos a formar */
     peso = tablero[s[0].f][s[0].c]; 
     
     /* el cuerpo de nuestro programa */
     do {

	  /*pinta_s(s, dimension);*/
	  
	  if (solucion_bt(s, nivel, dimension)) {
	       if (peso < voa) {
		    voa = peso;
		    /*printf("Nueva solucion optima\n");
		    pinta_s(s, dimension);*/
		    asigna_pares(s, soa);
	       }
	  }
	  
	  if (criterio(recorridos, s, peso, voa, nivel, dimension)) {
	       nivel++;
	       generar(tablero, mov, recorridos, s, nivel, &peso, paresmov);
	  }
	  else {
	       while ((nivel != 0) && (!mashermanos(mov, nivel))) {
		    retroceder(tablero, recorridos, mov, s, &nivel, &peso);
	       }
	       
	       if (nivel != 0) {
		    generar(tablero,mov,recorridos,s,nivel,&peso,paresmov);
	       }
	  }
     } while (nivel != 0);

     *peso_solucion = voa;
     
     return 0;
}