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!