Spfa算法模板

Posted Soda

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spfa算法模板相关的知识,希望对你有一定的参考价值。

输入点数n,边数m,起点终点边权

输出1号节点到所有点的最短路径长度

#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
int n,head[100000],num,m,dis[100000];
bool vis[100000];
struct node{
    int pre,v,to,from;
}e[100000];
queue<int>q;
void put(int from,int to,int v)
{
    e[++num].pre=head[from];
    e[num].from=from;
    e[num].to=to;
    e[num].v=v;
    head[from]=num;
}
void spfa(int s)
{
    q.push(s);vis[s]=1;
    int point=s;
    while(!q.empty())
    {
        point=q.front();
        q.pop();
        vis[point]=0;
        for(int i=head[point];i;i=e[i].pre)
            if(dis[e[i].from]+e[i].v<dis[e[i].to])
            {
                dis[e[i].to]=dis[e[i].from]+e[i].v;
                q.push(e[i].to);
                vis[e[i].to]=1;                
            }
    }
}
int main()
{
    cin>>n>>m;
    int x,y,v;
    memset(dis,127/3,sizeof(dis));
    dis[1]=0;
    for(int i=1;i<=m;i++)
    {
        cin>>x>>y>>v;
        put(x,y,v);
        put(y,x,v);
    }
    spfa(1);
    for(int i=1;i<=n;i++)cout<<dis[i]<< ;
}

 

以上是关于Spfa算法模板的主要内容,如果未能解决你的问题,请参考以下文章

SPFA算法模板

hdoj2544 最短路(Dijkstra || Floyd || SPFA)

Spfa算法模板

最短路算法 -- SPFA模板

洛谷 P5960 模板差分约束算法(spfa)

算法模板之SPFA