SPFA(G,w,s)
1. INITIALIZE-SINGLE-SOURCE(G,s)
2. INITIALIZE-QUEUE(Q)
3. ENQUEUE(Q,s)
4. While Not EMPTY(Q)
5. Do u<-DLQUEUE(Q)
6. For 每条边(u,v) in E[G]
7. Do tmp<-d[v]
8. Relax(u,v,w)
9. If (d[v] < tmp) and (v不在Q中)
10. ENQUEUE(Q,v)
#include < iostream >
using   namespace  std;
#define  MAX 500
#define  maxn 0x7fffffff
int  q[ 3 * MAX + 1 ],d[ 3 * MAX + 1 ];
bool  flag[ 3 * MAX + 1 ];
int  n,from,to;
int  spfa() // 源点from 目标点to 
{   memset(flag, 0 , sizeof (flag));
    
int  i,j,rear,front,now;
    rear
= front = 0 ;
    q[rear
++ ] = from;
    flag[from]
= 1 ;
    
for (i = 1 ;i <= n;i ++ )
        d[i]
= maxn;
    d[from]
= 0 ;
    
while (front <= rear)
    {    now
= q[front ++ ];
         flag[now]
= 0 ;
         
for (i = 1 ;i <= n;i ++ )
         {   
if (f[now][i] && d[now] + f[now][i] < d[i])
             {   d[i]
= d[now] + f[now][i];
                 
if ( ! flag[i])
                 {   flag[i]
= 1 ;
                     q[rear
++ ] = i;
                 }
             }
         }
    }
    
return  d[to];
}