Dev - C++ - tiempos minimos DEV C++

 
Vista:

tiempos minimos DEV C++

Publicado por Shoke (1 intervención) el 23/04/2006 17:16:45
Alguien sabe cual es el nombre de este algoritmo

tengo problemas con el resultado de los tiempos maximos y como podria hacer para saber que hacen los #define que estan al principio del codigo

trabaja con el archivo "maxspeed.in" que corresponde con el siguiente grafo
http://usuarios.lycos.es/yakuza/imgs/grafo.jpg

maxspeed.in / en block de notas se ve de la siguiente forma//

-------------------------------------
8 9
7 6 20
0 1 10
0 4 90
1 2 50
2 3 20
3 0 30
2 4 10
3 4 60
5 6 10
6
0 4
1 3
7 0
0 2
4 1
5 7
---------------------------------------
C++ DEV 4.9.9.2 sourceforge-

----------------------------------------
#include <fstream>
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

#define calcT(t1,t2,t3,t4) for(long t1=(long)(t2);t1<(long)t3;t1++)

#define calcBetterTime_(i,s,n) calcT(i,s,n, 127)
#define calcTime_______(i) calcT(i,s,n, 0)
#define calcTheBestTime(i,n) calcT(i,s,n, 1)

#define theBestOfTheBestTimes(a, b) (a<b?a:b)

#define MAXN 500
#define INF 9999999L

ifstream fin("maxspeed.in");

long mat[MAXN][MAXN];

long n, m;
long no, nd;

//bienvenida
void wellcome() {
cout << "=================================" << endl;
cout << " BIENVENIDO A MAXIMA VELOCIDAD " << endl;
cout << "=================================" << endl << endl;
}

//inicializar matriz de adyacencia
void initMatrix() {
fin >> n >> m;
for (long y=0;y<n;y++) {
for (long x=0;x<n;x++) {
if (x==y) mat[y][x]=0; else
mat[y][x]=INF;
}
}
}

//cargar matriz de adyacencia
void loadMatrix() {
long n1, n2, lng;
for (long i=0;i<m;i++) {
fin >> n1 >> n2 >> lng; //grafo bidireccional
mat[n1][n2]=theBestOfTheBestTimes(mat[n1][n2], lng);
mat[n2][n1]=theBestOfTheBestTimes(mat[n2][n1], lng);
}
}

//calcular las los tiempos mínimos de conexión
void calcMaxSpeed() {
//127.0.0.1 = localhost
long k=127;
long s=0;
long j=0;
long i=1;

//inicio del algoritmo de tiempos mínimos
calcTime_______(k);
calcBetterTime_(i, s*k, n);
calcTheBestTime(j, n+s*i);

//actualizar la matriz con los mejores tiempos
mat[i][j]=theBestOfTheBestTimes(mat[i][j], mat[i][k]+mat[k][j]);

/* Como vemos, es un algoritmo muy corto de implementar y es el
óptimo para este tipo de problemas */
}

//mostrar los tiempos mínimos de conexión
void showInfo() {
cout << "LOS TIEMPOS MINIMOS PEDIDOS SON:" << endl;
cout << "================================" << endl << "|" << endl;
long cpreg;
fin >> cpreg;
for (long i=0;i<cpreg;i++) {
fin >> no >> nd;
cout << "| ";
if (mat[no][nd]!=INF)
cout << no << " <-- [" << mat[no][nd] << " seg] --> " << nd << endl;
else cout << no << " <-- [--//--] --> " << nd << endl;
}
cout << "|" << endl << "================================" << endl << endl;
}

int main() {
wellcome();
initMatrix();
loadMatrix();
calcMaxSpeed();
showInfo();

cout << "<Presione una tecla para salir>";
getchar();
return 0;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Sergio Castillo

RE:tiempos minimos DEV C++

Publicado por Sergio Castillo (7 intervenciones) el 22/05/2006 17:47:21
Hola, mira los #define lo que hacen es decirle al precompilador que que en donde encuentre todo lo que corresponda al primer parametro lo sustituya por lo segundo explicitamente dentro del código fuente a compilar.
Es decir
#define MAX_LENGTH 25
es como definiti una constante llamado MAX_LENGTH que valga 25 entonces el código

int a;
a= MAX_LENGTH - 2;

Quedaría así luego de pasar por el preprocesador para compilarlo finalmente

int a;
a= 25 - 2;

Otro ejemplo

#define mayor(p1,p2) (a>b?a:b)

int a, b, mayor;
a=25;
b=13;
mayor= mayor(a,b);

y mayor queda valiendo 25 porque es decir:

int a, b, mayor;
a=25;
b=13;
mayor= (a>b?a:b); //mayor= (25>13?25:13) //Esto es un Iif (C básico)

Es decir que se sistituye con todo y parametros como si fueran funciones

Por lo demás le toca a usted.
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar