最短路径
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
– dijkstra算法与最小生成树prim算法的唯一不同之处是:
• dist[i]表示i到根的距离,而在prim中dist[i]表示i到生成树的最短距离。
最短路树和最小生成树
s s
最小生成树
在prim算法中: pre[i]维护的是生成树中节点i的父亲。 dist[i]:生成树中i到父亲的边的权值。
– – – – 用两个数组来维护最短边的权值和端点编号。 dist[i]:从i出发到达生成树的临时最短边(会被多次更新) pre[i]:该边的两个端点。i pre[i] 算法模块:
• 找到从生成树出发的最短边 • 将该边加入生成树 • 更新未加入各点的临时最短边
– 其中dist[i]最小,且未加入生成树的边,必是我们要找的最短边。
最短路树
在dijkstra算法中: pre[i]维护的是最短路树中节点i的父亲。 dist[i]:最短路树中i到根的所有边的权值之和。
找最短边开始扩展 pre[i] 生成树
wk.baidu.com
i dist[i]
– 思考,请证明算法正确性 思考,
为什么单源最短路(或最小生成树)形 成树?
• 考虑下图 • 如果u z的路只取一条即可
树的特点
1:无回路:即任意两节点间有且仅有一条路径 2:除了根节点,每个节点均有且仅有1个父亲 3:由2可得:N个节点必有N-1条边 由以上可知:在求最小生成树和最短路时,程序 会生成一棵最小生成树和最短路树,因此程序中 的存储结构可使用父亲表示法,只记录每个节点 的父亲即可!
最短路树和最小生成树
s s
最小生成树 在prim算法中,pre[i]实际维护的 是生成树中节点i的父亲。
最短路树
单源点最短路径
• • 求一个点到其它所有点的最短路 dijkstra算法与最小生成树prim算法几乎一样
– – – – – 都是把源点出发的最短路树看作一个整体 dist[i]维护从1到达i的临时最短路长度,即从根到i的长度。(会被多次更新) 每次扩展一个离根最近的节点,把它加入最短路树。 修正剩余所有点的最短路长度dist[i] 若要输出最短路径,则用pre[i]维护i号点的父亲即可。
最短路径
• 最优性原理 • 松驰操作 • 算法
–求一点到其它所有点的最短路
• bellman-ford算法 • SPFA算法 • dijkstra算法
–求图中任意两点间最短路
• floyd算法
最小生成树prim算法
• 把生成树中的所有点看作一个整体 • 实质是不停找从生成树出发的最短边进行 扩展。 • 标程中最短边的维护