
201712-4 CCF C++ 实现,Dijkstra 和 SPFA 算法
5星
- 浏览量: 0
- 大小:None
- 文件类型:None
简介:
本文档介绍了在2017年12月针对CCF(中国计算机学会)要求实现的C++版本Dijkstra和SPFA算法,详细解释了这两种经典最短路径算法的原理及其实现方法。
思路:使用两个数组sum和ans分别存储从1号节点到每个节点连续走小路的路程以及最终疲惫值。如果当前行走的是小路,则更新疲惫值,并累计已走过的小路总长度。具体来说,对于一个相邻节点ne(通过边next到达),其疲惫值计算公式为:`ans[ne] = ans[nn] - sum[nn] + (sum[nn] + next.v) * (sum[nn] + next.v)`,其中nn是当前处理的父节点。同时更新走小路所累积的路程,即 `sum[ne]=sum[nn]+next.v`。
如果行走的是大路,则将累计的小路长度清零(即`sum=0`),疲惫值则直接加上边长:`ans[ne] = ans[nn] + next.v`。通过这种方式可以计算出从1号节点到所有其他节点的最终疲惫值和小路段路程。
全部评论 (0)
还没有任何评论哟~


