博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spfa(最短路求解)
阅读量:6593 次
发布时间:2019-06-24

本文共 1641 字,大约阅读时间需要 5 分钟。

spfa(最短路求解)

模板:

#include
#include
#include
#include
using namespace std; const int maxn = 105; const int maxm = 100005; struct Edge{ int to,w,next; }edge[maxm<<1]; int tot = 0,dis[maxn],cnt[maxn],head[maxn]; void addedge(int u,int v,int w) { edge[tot].to = v;edge[tot].w = w;edge[tot].next = head[u]; head[u] = tot++; } void spfa(int st,int ed) { int i; queue
que; while (!que.empty()) que.pop(); memset(dis,0x3f3f3f3f,sizeof(dis)); memset(cnt,0,sizeof(cnt)); que.push(st); dis[st] = 0; cnt[st] = 1; while (!que.empty()) { int u = que.front(); que.pop(); if (u == ed) continue; for (i = head[u];i != -1;i = edge[i].next) { int v = edge[i].to; if (dis[u] + edge[i].w < dis[v]) { dis[v] = dis[u] + edge[i].w; if (!cnt[v]) que.push(v); cnt[v] = cnt[u]; } else if (dis[u] + edge[i].w == dis[v]) { if (!cnt[v]) que.push(v); cnt[v] += cnt[u]; } } } } int main() { int N,M,S,E,u,v,w,i; memset(head,-1,sizeof(head)); scanf("%d%d%d%d",&N,&M,&S,&E); while (M--) { scanf("%d%d%d",&u,&v,&w); addedge(u,v,w); addedge(v,u,w); } spfa(S,E); printf("%d %d\n",dis[E],cnt[E]); return 0; }

也可以计算有多少个最小生成树

转载于:https://www.cnblogs.com/fzuljz/p/6115512.html

你可能感兴趣的文章
投行报告看好SIEM市场
查看>>
Eclipse·Maven·构建SpringMVC简单工程-1
查看>>
python版本更新,找不到python的环境变量
查看>>
excel中SMALL函数的用法
查看>>
CAS单点登录-配置中心(三)
查看>>
信息到数据到认知,结构化到知识图谱
查看>>
我的友情链接
查看>>
TOSSIM仿真之网络配置
查看>>
虚拟存储技术的概念及特点
查看>>
junit4 spring集成测试
查看>>
Android四角圆形背景
查看>>
电子阅报有着新的科技参与,备受欢迎
查看>>
IT学生解惑真经
查看>>
我的友情链接
查看>>
初学ANSIBLE
查看>>
vue-router笔记
查看>>
LoadRunner Vugen打开时遇到的两个问题
查看>>
python 正则表达式sub函数和正则匹配对象Match Objects
查看>>
iOS image内容保存到本地相册
查看>>
判断单链表是否有环——LinkedList
查看>>