C/Visual C - tiempos minimos

 
Vista:

tiempos minimos

Publicado por shoke (8 intervenciones) el 23/04/2006 17:21:03
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

RE:tiempos minimos

Publicado por marcos (2 intervenciones) el 24/04/2006 14:38:17
#define calcT(t1,t2,t3,t4) for(long t1=(long)(t2);t1<(long)t3;t1++)

dispensa si me equivoco, ya que no he probado el codigo, solo lo lei. Creo que esta linea hace NADA, y las demas la llaman, por lo tanto, TODAS hacen NADA. Pero no hagas caso a los rumores.
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