//Se limita el tiempo de cada trip// int tiempo_max(int i, int j, int k, variable **variables, datos_problema* instancia){ int trip1; int x2, y2, trip2; int trips, xs, ys; int w, index; int ph = ((*instancia).puntos+(*instancia).hoteles); double dist_rec = 0; //Se obtienen las componentes que se necesiten (x, y, z) de las variables i y j// x2 = dim_x(j, ph); y2 = dim_y(j, ph); trip1 = dim_z(i, ph); trip2 = dim_z(j, ph); //Si la variable i-esima y la variable j-esima estan en el mismo trip, y el valor de // // la variable j-esima quiere tomar 1// //Se suman todas las distancias de las variables i-esimas que tienen valor 1// if(trip1 == trip2 && k == 1){ for(index = 0; index <= i; index++){ trips = dim_z(index,ph); if(trips == trip1){ if((*variables)[index].valor == 1){ xs = dim_x(index,ph); ys = dim_y(index,ph); w = obtener_indice(xs,ys,ph); dist_rec += (*instancia).matriz_dist[w]; } } } w = obtener_indice(x2, y2, ph); dist_rec += (*instancia).matriz_dist[w]; //Si la distancia recorrida (incluyendo la variable j-esima), es mayor a la distancia maxima del trip, retorna Falso// if(dist_rec > (*instancia).dist_max_trip[trip1]){ return False; } } return True; }
/* * imprime un caracter sobre la superficie dst (generalmente screen) */ int imprimir_letra (SDL_Surface * dst, SDL_Surface * ima, SDL_Rect * fuentes, \ int x, int y, char letra) { SDL_Rect srcrect; SDL_Rect dstrect = {x, y, 0, 0}; int indice = obtener_indice (letra); if (letra == ' ') return fuentes [0].w; if (indice != -1) { srcrect = fuentes [indice]; SDL_BlitSurface(ima, &srcrect, dst, &dstrect); } return srcrect.w; }
int acceder_direccion(unsigned int direccion) { unsigned int etiqueta, indice; /* obttener la etiqueta y el nºconjunto (índice), de la dirección */ etiqueta = obtener_etiqueta(direccion); indice = obtener_indice(direccion); /* comprobar si el acceso es un fallo o es un acierto, es decir, si se encuentra o no en cache dicho bloque */ if(es_acierto(etiqueta, indice)) { #ifdef _DEBUG printf("Acierto de cache para: %x\n", direccion); #endif /* actualizamos los contadores lru */ if(es_lru) actualizar_contadores(etiqueta, indice); return 1; } #ifdef _DEBUG printf("Fallo en la cache para: %x\n", direccion); #endif /* si es fallo, traer el bloque que contiene el dato apuntado por la dirección, a la caché */ /* traer dicho bloque a la memoria cache */ traer_bloque(etiqueta, indice); /* actualizamos los contadores lru */ if(es_lru) actualizar_contadores(etiqueta, indice); return 0; }