Spfa算法模板

来源:互联网 发布:网络歌手囚鸟的歌曲 编辑:程序博客网 时间:2024/05/22 04:48
输入点数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]<<' ';}

 

0 0