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]<<' ';
}
复制代码

 

posted @   Echo宝贝儿  阅读(242)  评论(0编辑  收藏  举报
编辑推荐:
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
阅读排行:
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· DeepSeek火爆全网,官网宕机?本地部署一个随便玩「LLM探索」
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 上周热点回顾(1.20-1.26)
点击右上角即可分享
微信分享提示