博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
图论-单源最短路-SPFA算法
阅读量:4359 次
发布时间:2019-06-07

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

有关概念:

  最短路问题:若在图中的每一条边都有对应的权值,求从一点到另一点之间权值和最小的路径

  SPFA算法的功能是求固定起点到图中其余各点的的最短路(单源最短路径)

  约定:图中不存在负权环,用邻接表存储有向图,di存放从起点到结点i的最短路,q为队列,保存待处理节点

思路:

  首先指定起点入队,取当前队头结点u,沿每一条与u相连的边向外扩展,对该边所指向的结点v松弛(比较当前dv与当前du加此边长,更新最短路值dv,以及最短路径prev)如果v不在队列中且更新了最短路值,v进队,直至队列中没有元素时终止

  较于Dijkstra,SPFA能处理带负权的边,但如果点进队的次数过多,时间效率就不如前者高

1 #include
2 #include
3 #define MAXN 4 #define MAXM 5 #define INF 214748364 6 int n,m,cnt,d[MAXN],heads[MAXN],q[MAXN],pre[MAXN]; 7 int head,tail;//队头、队尾指针 8 bool viss[MAXN];//结点i是否在队列中 9 struct node10 {11 int u,v;12 int next;13 int val;14 }edge[MAXM];15 void add(int x,int y,int z)16 {17 edge[++cnt].u=x;18 edge[cnt].v=y;19 edge[cnt].next=heads[x];20 edge[cnt].val=z;21 heads[x]=cnt;22 }23 void SPFA()24 {25 head=1;tail=2;26 q[1]=1;27 viss[1]=1;//默认1为起点28 while(head

*参考:

转载于:https://www.cnblogs.com/xqmmcqs/p/5953200.html

你可能感兴趣的文章
算法习题---栈与队列之栈的数学性质
查看>>
三大主流软件负载均衡器对比(LVS VS Nginx VS Haproxy)
查看>>
Simulation
查看>>
sqli-labs(33)
查看>>
js队列排序
查看>>
Spring 简单配置连接数据库
查看>>
通用前端开发框架(一)
查看>>
B150主板Win7系统出现蓝屏且提示错误代码0x000000C5的原因及解决方法
查看>>
自动回复消息-微信公众平台开发4(asp.net)
查看>>
android开发 更新升级安装到一半自动闪退
查看>>
unity3d + photon + grpc + nodejs + postgis/postgresql 游戏服务器设计
查看>>
laravel多对多好文章
查看>>
SAP 物料移动类型查询表
查看>>
$("#id").val()取值textarea是""
查看>>
有道云笔记 markdown 本地资源图片 粘贴到word居然粘贴不过去 资源名不能有汉子...
查看>>
[有问有答] 如何用 git 来管理你的打包工作
查看>>
Oracle表中的注释生成相应的SqlServer更改语句
查看>>
75个最佳Web设计资源
查看>>
6. ZigZag Conversion
查看>>
gvim 配置
查看>>