最短路径算法_最短路径算法

本文介绍了最短路径算法,包括单源无权图的宽度优先搜索(BFS)和单源正权图的迪杰斯特拉算法(Dijkstra)。通过实例详细解析了BFS如何找到最短路径,以及Dijkstra算法的步骤和贪心性质证明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、 问题描述

给定一个图G,寻找图中起点V到终点U的最短路径的方法,称为最短路径算法。路径的长短由指定的权重计算方法来决定,最常见的是边的权重之和。边的权重有正负之分,指定的起点可以是单个或全部,不同的场景适用于不同的最短路径算法。接下来分场景介绍几种典型的最短路径算法。

二、 单源无权图 – 宽度优先算法(BFS)

给定有向无权图(可视为等权图)如下,寻找起点A到终点D的最短路径,即从起点A出发,经过最少的边到达终点D。此场景适用于宽度优先搜索。

a1a0cd11ba492e09d9f3b72393565c35.gif

BFS的主要思想为,从起点开始,先搜索儿子节点,再搜索孙子节点,这样一代一代地搜索下去,直到到达终点,从起点到终点的代数就是最短路径的长度。在上例中,从A开始,将搜索序列初始化为[(A, 0)],然后遍历A的儿子节点B和E,加入搜索序列得到[(A, 0), (B, 1), (E, 1)],继续遍历B和E的儿子节点,加入搜索序列得到[(A, 0), (B, 1), (E, 1), (C, 2), (D, 2)],此时已经到达终点D,最短路径为A->E->D,长度为2。

三、 单源正权图 – 迪杰斯特拉算法(Dijkstra、DJ)

给定有向带正权图(权重都为正数)如下,寻找起点A到终点D的最短路径,即从起点A到终点D的路径上各边的权重之和为最小。Dijkstra算法是解决此类问题的经典算法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值