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; } } } }
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; }