分享好友 最新动态首页 最新动态分类 切换频道
Dijkstra—求最短路径(图论,附例题、代码)
2024-12-26 19:03

在解决带权有向图的最短路径中Dijkstra算法(迪杰斯特拉)用于解决单源有向图的最短路径问题。我们把一张有向图的起始称为源点,结束称为终点,最短路径就是从源点到终点所经历的最小权值之和。本文将介绍Dijkstra算法的原理和实用案例。

Dijkstra—求最短路径(图论,附例题、代码)

PS.如果你是为了今天的每日一题来的,那么你找对地方了,因为本人也是特地来恶补的

Dijkstra算法的主要思想是贪心,每次将选中距离源点最近的点,并不断更新。为实现这个目的,我们维护一个dist[]数组和一个visited[]数组,并规定

1、图的邻接矩阵中,若a无指向b的边,将其距离视为∞(为显示直观并且防止溢出,可设为MAX=INT_MAX/2)

2、dist[i]数组表示目前更新到的i位置距离源点的最短距离

3、visited[i]==1表示i到源点的距离已是最近,无法再更新。

我们进行以下步骤

1、初始化邻接矩阵、dist数组和visited数组

2、扫描dist数组,找出距离源点最近的节点i(若visited[i]=1,该节点不进行比较

3、i距离源点的最短距离已被找到,将visited[i]设为1

4、找出i指向的节点并更新他们与源点的最短距离。

5、重复2~4

请看下面这个例子

 

设源点为A,初始化阶段把源点dist[0]初始化为0,其余为MAX。(源点到源点的最短距离为0,其他点还未扫描到,可暂时用MAX初始化。同时,在扫描结束后,也可以依据是否有节点距离源点MAX,判断该有向图是否存在无法到达的节点。)

节点

A

B

C

D

E

F

dist

0

MAX

MAX

MAX

MAX

MAX

visited

0

0

0

0

0

0

(1)第一次扫描

扫描dist数组,距离源点最近的节点为A,因此A到源点的最短距离为0。

将visited[ A ]设为1。

将其余点设为min (dist[ A ]+G[ A ][i] ,dist[i])

(A到源点的最短距离已经求出,更新A直接指向的点i到源点的距离,即dist[A]+G[A][i],该点有可能比原本的dist[i]大,取最小)

节点

A

B

C

D

E

F

dist

0

1

5

MAX

MAX

MAX

visited

1

0

0

0

0

0

 

 

(2)第二次扫描

扫描dist数组,与源点距离最近的点为B注意:visited[A]已被设为1,表示已找到最短距离无法再更新,因此A不被扫描到。

将visited[ B ]设为1。

将其余点设为min (dist[ B ]+G[ B ][i] ,dist[i])

这里dist[C]的值被更新,因为A->B->C的距离比A->C的距离短。

节点

A

B

C

D

E

F

dist

0

1

4

3

MAX

MAX

visited

1

1

0

0

0

0

 

 

(3)第三次扫描

扫描dist数组,与源点距离最近的点为D注意:visited[i]已被设为1,表示已找到最短距离无法再更新,因此i不被扫描到。

将visited[ D ]设为1。

将其余点设为min (dist[ D ]+G[ D ][i] ,dist[i])

节点

A

B

C

D

E

F

dist

0

1

4

3

4

7

visited

1

1

0

1

0

0

 

 

(4)第四次扫描

扫描dist数组,与源点距离最近的点为E注意:visited[i]已被设为1,表示已找到最短距离无法再更新,因此i不被扫描到。

将visited[ E ]设为1。

将其余点设为min (dist[ E ]+G[ E ][i] ,dist[i])

节点

A

B

C

D

E

F

dist

0

1

4

3

4

7

visited

1

1

0

1

1

0

 

(5)第五次扫描

扫描dist数组,与源点距离最近的点为C注意:visited[i]已被设为1,表示已找到最短距离无法再更新,因此i不被扫描到。

将visited[ C ]设为1。

将其余点设为min (dist[ C ]+G[ C ][i] ,dist[i])

节点

A

B

C

D

E

F

dist

0

1

4

3

4

7

visited

1

1

1

1

1

0

 

(6)第六次扫描

扫描dist数组,与源点距离最近的点为F注意:visited[i]已被设为1,表示已找到最短距离无法再更新,因此i不被扫描到。

将visited[ F ]设为1。

将其余点设为min (dist[ F ]+G[ F ][i] ,dist[i])

节点

A

B

C

D

E

F

dist

0

1

4

3

4

7

visited

1

1

1

1

1

1

 

(7)第七次扫描

所有visited均被设为1,表示所有节点均已找到与源点的最短距离。

 

若有向图中有的节点无法到达

 

节点

A

B

C

D

E

F

G

dist

0

1

4

3

4

7

MAX

visited

1

1

1

1

1

1

0

此时我们已经把能到达的点的最短路径找出来了,按之前的步骤扫描dist数组,发现距离源点最近的节点为G(前面已经说过了,visited数组限制了A~F不进行此次扫描的比较)。而dist[G]的值为MAX,即我们初始化的“无限大”,因此判断存在无法到达的节点。

有 n 个网络节点,标记为 1 到 n。

给你一个列表 times,表示信号经过 有向 边的传递时间。 times[i] = (ui, vi, wi),其中 ui 是源节点,vi 是目标节点, wi 是一个信号从源节点传递到目标节点的时间。

现在,从某个节点 K 发出一个信号。需要多久才能使所有节点都收到信号?如果不能使所有节点收到信号,返回 -1 。

示例1

 

输入:times = [[2,1,1],[2,3,1],[3,4,1]], n = 4, k = 2

输出:2

示例 2

 

输入:times = [[1,2,1]], n = 2, k = 1

输出:1

示例 3

 

输入:times = [[1,2,1]], n = 2, k = 2

输出:-1

题目来源于:743. 网络延迟时间 - 力扣(LeetCode

1.朴素的Dijkstra算法


最新文章
微信小程序API 获取小程序页面二维码
参数类型默认值说明sceneString最大32个可见字符,只支持数字,大小写英文以及部分特殊字符,其它字符需要自行编码处理(因不支持%,中文无法使用urlencode处理,请使用其他编码方式)pageString必须是已经发布的小程序页面,例如"pages/in
精选个性说说,2017年最新潮流短语
本文为你精选了最新的个性说说,涵盖了生活、情感、态度等多个方面。这些说说展现了现代人的独特个性和真实心声,语言简洁明了,充满个性魅力。它们反映了现代人的生活状态和价值观,同时也表达了对未来的期待和追求。这些个性说说充满了正
贝力菲热水器全国400服务热线《今日汇总》
1、排水管不通畅或排水泵堵转;2、电脑板坏;3、排水泵与电脑板接触不良或排水泵坏;4、查排水管是否弯折或高度过高,如不是,打开滤门,检查过滤器是否堵塞;5、若过滤器没有堵塞,检查排水管是否能排水;6、排水管不能滚筒上排水的洗衣机故
震惊!用AI一键生成完美美女写真,真的太简单了!
限时免费,点击体验最近超火的AI生图神器,坐拥3000美女的大男主就是你! https://ai.sohu.com/pc/generate/textToImg?_trans_=030001_yljdaimn 在这个科技不断进步的时代,我们已经不再满足于传统的照片编辑和生成。而如今,AI技术的发展
qq怎么邀人进群
QQ作为一款广受欢迎的即时通讯软件,不仅提供了便捷的聊天功能,还允许用户创建和管理群聊,方便多人之间的交流和互动。那么,如何在QQ中邀请好友加入群聊呢?以下是详细的步骤介绍。### 一、通过手机QQ邀请1. **登录QQ**:首先,确保你已
零基础轻松入门,主流网站搭建教程,打造专属个性化网站
本教程涵盖主流网站搭建方法,助您轻松入门,快速打造独具特色的个性化网站。从基础到进阶,涵盖域名注册、空间选择、网站设计等实用技巧,让您轻松掌握网站搭建全过程。挑选合适的网站搭建平台网站搭建实战教程其他平台搭建指南在互联网迅
苹果的芯片帝国
如果您希望可以时常见面,欢迎标星收藏哦~自研芯片,非常美妙的四个字,芯片代表着目前地球上集成度最高的科技实力,而自研往往意味着能够自己掌控芯片设计这一关键阶段,无数厂商为了自研芯片而前赴后继。而苹果,就是这无数厂商中的佼佼
上海SEO优化,企业在线崛起的强力助推器
上海SEO网络优化推广公司,凭借专业技术和丰富经验,帮助企业提升在线可见度,助力在线崛起。通过精准关键词布局、网站优化、内容营销等策略,提升企业品牌形象,吸引潜在客户,实现业绩增长。成为企业在线崛起的秘密武器。随着互联网的快
黄冈湖南站全链路优化推广,企业腾飞新动力引擎
黄冈湖南整站优化推广,为企业提供全面营销解决方案,助力企业实现线上飞跃,成为企业腾飞的新引擎。随着互联网的飞速发展,网络营销已经成为企业争夺市场份额的重要手段,在众多营销策略中,整站优化推广成为了许多企业提升品牌知名度、扩
Storyboarder AI
Storyboarder.ai是一款由专业电影制作人开发的AI辅助故事板制作工具。该工具旨在简化故事板创建流程,提高创意团队之间的沟通效率。通过利用先进的AI算法,Storyboarder.ai能够将简单的想法或现有剧本快速转化为专业的屏幕剧本、镜头列表和
相关文章
推荐文章
发表评论
0评