Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Bellman-Ford
FABIO AUGUSTO VANEGAS BOVEA
Caractersticas
//funcin de inicializacin
void init(){
for( int i = 0 ; i <= V ; ++i ){
distancia[ i ] = INF; //inicializamos todas las distancias con valor infinito
previo[ i ] = -1; //inicializamos el previo del vrtice i con -1
}
}
De acuerdo al vrtice inicial que elijamos cambiara la distancia
inicial, por ejemplo la ruta ms corta partiendo del vrtice 1 a todos
los dems vrtices.
Inicialmente la distancia de vrtice 1 -> vrtice 1 es 0 por estar
en el mismo lugar.
for( int actual = 1 ; actual <= V ; ++actual ){ //Estos dos for = O(E)
for( int j = 0 ; j < ady[ actual ].size() ; ++j ){ //reviso sus
adyacentes del vertice actual
int adyacente = ady[ actual ][ j ].v; //id del vertice adyacente
int peso = ady[ actual ][ j ].w; //peso de la arista que une
actual con adyacente ( actual , adyacente )
//Realizamos paso de relajacion para la arista actual
relajacion( actual , adyacente , peso );
}
}
Y se vuelve a calcular el paso de relajacin:
//Paso de relajacion
void relajacion( int actual , int adyacente , int peso ){
//Si la distancia del origen al vertice actual + peso de su arista es
menor a la distancia del origen al vertice adyacente
if( distancia[ actual ] + peso < distancia[ adyacente ] ){
distancia[ adyacente ] = distancia[ actual ] + peso;
//relajamos el vertice actualizando la distancia
previo[ adyacente ] = actual; //a su vez
actualizamos el vertice previo
Q.push( Node( adyacente , distancia[ adyacente ] ) );
//agregamos adyacente a la cola de prioridad
}
}
Donde:
Segunda Iteracin