spfa

int ans[maxn];
bool vis[maxn];
queue<int>q;
void spfa(int f){
     memset(ans,63,sizeof(ans));
     ans[f]=0;
     vis[f]=true;
     while(!q.empty()) q.pop();
     q.push(f);
     while(!q.empty()){
        int u=q.front();
        q.pop();
        for (int i=adj[u];i;i=bian[i].next){
            int v=bian[i].v;
            if(ans[v]>ans[u]+bian[i].zhi){
                ans[v]=ans[u]+bian[i].zhi;
                if(!vis[v]){
                    vis[v]=true;
                    q.push(v);
                }
            }
        }
        vis[u]=false;
     }
}
原文地址:https://www.cnblogs.com/lmjer/p/9332242.html