Exemplo n.º 1
0
//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;
}
Exemplo n.º 2
0
/*
 * 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;
}
Exemplo n.º 3
0
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;
}