spfa+链式前向星模板

#include<bits/stdc++.h>
#define inf 1<<30
using namespace std;

struct Edge{
    int nex,to,w;
}edge[1000000];
int cnt;
int n;
inline void add(int u,int v,int w){
    edge[cnt].to=v;
    edge[cnt].w=w;
    edge[cnt].nex=head[u];
    head[u]=cnt++;
}
int dis[10000000];
void spfa(int s){
    queue<int>q;
    bool vis[100000];
    memset(vis,0,sizeof vis);
    vis[s]=1;
    dis[s]=0;
    q.push(s);
    while(!q.empty()){
        int f=q.front();
        q.pop();
        vis[f]=0;
        for(int i=head[f];~i;i=edge[i].nex){
            int v=edge[i].to;
            if(dis[v]>dis[f]+edge[i].w){
                dis[v]=dis[f]+edge[i].w;
                if(!vis[v]){
                    vis[v]=1;
                    q.push(v);
                }
            }
        }
    }
}
int main()
{
    
    return 0;
}

  

原文地址:https://www.cnblogs.com/zmin/p/7361712.html