算法基础:狄克斯特拉算法(基于Python)

本文介绍了狄克斯特拉算法的基本概念和步骤,通过旅行最短距离的例子阐述其解决赋权图最短路径问题的原理。并提供了算法的Python代码实现,帮助理解如何构建和应用狄克斯特拉算法。
摘要由CSDN通过智能技术生成

本博客所有内容均整理自《算法图解》,欢迎讨论交流~

之前在引入图算法和广度优先搜索的时候,我举了一个旅行最短距离的例子,其实在那一节,广度优先搜索并没有解决那个例子的问题,在这里使用狄克斯特拉算法才可以真正解决赋权图的最短距离问题。

我们依然沿用那个例子。

假设你要从北京到成都去旅游,但是已经买不到北京直达成都的火车票或者飞机票了,于是你决定中转。现在有以下几种中转方案:

1、北京-乌鲁木齐-西安-成都

2、北京-合肥-武汉-成都

3、北京-大连-上海-重庆-成都

4、北京-九江-广州-昆明-成都

我们不考虑价格,仅仅考虑距离,这几种方案哪个距离最短呢?

其实这里我们首先要弄清楚的是,在这几种方案中,每两个城市之间的距离是多少。有了这些距离之后,我们才可以画出每种方案的图,把这些距离标在两个城市之间的连线上。这种边带有权值的图称为赋权图

找到赋权图中前往X的最短路径,我们常使用狄克斯特拉算法。


1、狄克斯特拉算法的基本概念

关于狄克斯特拉算法的定义,百度百科是这样给出的:狄克斯特拉算法是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题。狄克斯特拉算法主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。

下面来看看如何对下面的图使用这种算法。

 

对于上面的图,每条边都有一个权值,在这里代表从有向边的起点到终点所需的时间。如果我们需要找出从起点到达终点的最短路径,就可以使用狄克斯特拉算法来解决这个问题。

在使用狄克斯特拉之前,我们先来看看使用广度优先搜索算法来解决这个问题的结果,如下图所示:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值