SPFA (o un poco para escribir sobre ella, aunque inútil)

SPFA ¿Por qué perder, porque el tiempo de la complejidad es inestable, que la gente puede ser pegado completamente fuera un mapa para que, de hecho, es la cola de optimización SPFA algoritmo Bellman-Ford, y en algunos casos se ejecute más rápido que él.

#include <bits / STDC ++ h.>
 usando  espacio de nombres std;
int n, m, p, f [ 1000 ] [ 1000 ], dis [ 1000 ], la cantidad [ 1000 ], visita [ 1000 ], la ruta [ 1000 ]; 
cola < int > Que;
void entrada () 
{ 
    memset (sid, 0x7f , sizeof (dis)); 
    memset (f, 0x7f , sizeof (f));
    int aa, ss, peso; 
    cin >> n >> m >> p; 
    dis [p] = 0 ;
    para ( int i = 1 ; i <= m; i ++ ) 
    { 
        f [i] [i] = 0 ; 
        cin >> >> aa ss >> peso; 
        f [aa] [ss] = f [ss] [aa] = peso; 
    } 
    Para ( int i = 1 ; i <= n; i ++ ) 
    ruta [i] = p; 
    camino [p] = 0 ; 
} 
Bool SPFA ( int fuente) 
{ 
    que.push (fuente); 
    visita [fuente] = 1 ; 
    Cantidad [fuente] ++;
    mientras que (! que.empty ()) 
    { 
        int b = que.front (); 
        visita [b] = 0 ; 
        que.pop (); 
        para ( int i = 1 ; i <= n; i ++ ) 
        { 
            si (! f [b] [i] = 0x7f7f ) 
            { 
                si (dis [i]> dis [B] + f [b] [i]) 
                { 
                    dis [i] = dis [b] + f [b] [i]; 
                    camino [i] = b;
                si (! visita [i]) 
                {
                que.push (i); 
                Cantidad [i] 
    { ++ ;
                si (cantidad [i]> = n)
                 de retorno  falsa ; 
                visita [i] = 1 ; 
                } 
                } 
            } 
        } 
    } 
    Regresar  verdadera ; 
} 
Void DNN ( int i) 
{ 
    pila < int > s; 
    cout << p;
    mientras que (ruta [i] =! 0 ) 
        s.push (i); 
        i =camino [i]; 
    } 
    , Mientras que (! S.empty ()) 
    { 
        cout << " -> " << s.top (); 
        s.pop (); 
    } 
} 
Void print () 
{ 
    a ( int i = 1 ; i <= n; i ++ )
     si (i =! P) 
    { 
        cout << i << '  ' << ' : ' << '  ' << dis [ i] << '  ' << "" << '  ' ; 
        DNN (i); 
        cout << endl; 
    } 
} 
int main () 
{ 
    entrada (); 
    si (SPFA (p)) 
    print (); 
    lo demás  
    cout << " 有负权回路! " ;
     volver  0 ; 
}

Algoritmos realmente han aprendido hace mucho tiempo lleno de recuerdos de él!

Supongo que te gusta

Origin www.cnblogs.com/RW-wbd/p/12564035.html
Recomendado
Clasificación