图论——最短路——Dijkstra算法

简介: 对图论有一定了解的人,一定知道最短路。最短路算法一共有4中,严格来说是3种,应为最后一个是第3个的优化。他们分别是:Floyd、Dijkstra、Bellman-Ford和SPFA算法Floyd是最暴力的思想,这里就不在阐述。

对图论有一定了解的人,一定知道最短路。

最短路算法一共有4中,严格来说是3种,应为最后一个是第3个的优化。

他们分别是:

Floyd、Dijkstra、Bellman-Ford和SPFA算法

Floyd是最暴力的思想,这里就不在阐述。

今天,我们来讲Dijkstra算法,中文名迪杰斯特拉。

Dijkstra是单源最短路,也就是计算从一点出发,到各个点的距离。

这是一个类似贪心的算法,是否流程如下:

1.初始化dist [ v0 ] = 0;(v0是源点),其余dist为INF(正无穷,通常用0x3f3f3f3f表示)

2.找出未标记的、dist [ x ] 的最小 x ,标记 x;

3.扫描节点x的所有 出边 (x,y,z)表示x到y有权值为z的边。,若dist [ y ] > dist [ x ] + z,则使用 dist [ x ] + z 更新 dist [ y ];

4.重复2~3,直到所有点都被标记。

dist [ x ] 就是 v0 到 x 的最短路径。

代码实现:

 1 int a[3010][3010]/**/,d[3010],n,m;
 2 bool v[3010];//是否被访问
 3 void dijkstra(int v0)//源点
 4 {
 5     memset(d,0x3f3f3f3f,sizeof(d));//距离
 6     memset(v,0,sizeof(v));//初始化都未访问
 7     d[v0]=0;
 8     for(int i=1;i<n;i++)//重复n-1次 
 9     {
10         int x=0;
11         //找到未标记的dist最小的节点
12         for(int j=1;j<=n;j++)
13             if(!v[j]&&(x==0||d[j]<d[x]))//j为访问或dist[j]<dist[x]; 
14                 x=j;
15         v[x]=1;
16         //用x更新其他点 
17         for(int y=1;y<=n;y++)
18             d[y]=min(d[y],d[x]+a[x][y]/*x到y的边权值*/); 
19     }
20 }

这就是模板of Dijkstra,很好理解,大家要是有不理解的,也可以查相关资料,去了解更多的知识。

相关文章
|
1月前
|
算法 编译器 C++
【狂热算法篇】探秘图论之Dijkstra 算法:穿越图的迷宫的最短路径力量(通俗易懂版)
【狂热算法篇】探秘图论之Dijkstra 算法:穿越图的迷宫的最短路径力量(通俗易懂版)
|
5月前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
136 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
1月前
|
存储 算法 iOS开发
【狂热算法篇】并查集:探秘图论中的 “连通神器”,解锁动态连通性的神秘力量(通俗易懂版)
【狂热算法篇】并查集:探秘图论中的 “连通神器”,解锁动态连通性的神秘力量(通俗易懂版)
|
1月前
|
存储 算法 测试技术
【狂热算法篇】探秘图论之 Floyd 算法:解锁最短路径的神秘密码(通俗易懂版)
【狂热算法篇】探秘图论之 Floyd 算法:解锁最短路径的神秘密码(通俗易懂版)
|
4月前
|
JSON 算法 数据挖掘
基于图论算法有向图PageRank与无向图Louvain算法构建指令的方式方法 用于支撑qwen agent中的统计相关组件
利用图序列进行数据解读,主要包括节点序列分析、边序列分析以及结合节点和边序列的综合分析。节点序列分析涉及节点度分析(如入度、出度、度中心性)、节点属性分析(如品牌、价格等属性的分布与聚类)、节点标签分析(如不同标签的分布及标签间的关联)。边序列分析则关注边的权重分析(如关联强度)、边的类型分析(如管理、协作等关系)及路径分析(如最短路径计算)。结合节点和边序列的分析,如子图挖掘和图的动态分析,可以帮助深入理解图的结构和功能。例如,通过子图挖掘可以发现具有特定结构的子图,而图的动态分析则能揭示图随时间的变化趋势。这些分析方法结合使用,能够从多个角度全面解读图谱数据,为决策提供有力支持。
181 0
|
5月前
|
存储 算法 程序员
迪杰斯特拉(Dijkstra)算法(C/C++)
迪杰斯特拉(Dijkstra)算法(C/C++)
|
11天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于生物地理算法的MLP多层感知机优化matlab仿真
本程序基于生物地理算法(BBO)优化MLP多层感知机,通过MATLAB2022A实现随机数据点的趋势预测,并输出优化收敛曲线。BBO模拟物种在地理空间上的迁移、竞争与适应过程,以优化MLP的权重和偏置参数,提升预测性能。完整程序无水印,适用于机器学习和数据预测任务。
|
1天前
|
算法 数据安全/隐私保护
基于GA遗传算法的拱桥静载试验车辆最优布载matlab仿真
本程序基于遗传算法(GA)实现拱桥静载试验车辆最优布载的MATLAB仿真,旨在自动化确定车辆位置以满足加载效率要求(0.95≤ηq≤1.05),目标是使ηq尽量接近1,同时减少车辆数量和布载耗时。程序在MATLAB 2022A版本下运行,展示了工况1至工况3的测试结果。通过优化模型,综合考虑车辆重量、位置、类型及车道占用等因素,确保桥梁关键部位承受最大荷载,从而有效评估桥梁性能。核心代码实现了迭代优化过程,并输出最优布载方案及相关参数。
|
5天前
|
机器学习/深度学习 存储 算法
基于MobileNet深度学习网络的活体人脸识别检测算法matlab仿真
本内容主要介绍一种基于MobileNet深度学习网络的活体人脸识别检测技术及MQAM调制类型识别方法。完整程序运行效果无水印,需使用Matlab2022a版本。核心代码包含详细中文注释与操作视频。理论概述中提到,传统人脸识别易受非活体攻击影响,而MobileNet通过轻量化的深度可分离卷积结构,在保证准确性的同时提升检测效率。活体人脸与非活体在纹理和光照上存在显著差异,MobileNet可有效提取人脸高级特征,为无线通信领域提供先进的调制类型识别方案。
|
1天前
|
算法 数据安全/隐私保护 异构计算
基于LSB最低有效位的音频水印嵌入提取算法FPGA实现,包含testbench和MATLAB对比
本项目展示了一种基于FPGA的音频水印算法,采用LSB(最低有效位)技术实现版权保护与数据追踪功能。使用Vivado2019.2和Matlab2022a开发,完整代码含中文注释及操作视频。算法通过修改音频采样点的最低有效位嵌入水印,人耳难以察觉变化。然而,面对滤波或压缩等攻击时,水印提取可能受影响。该项目运行效果无水印干扰,适合实时应用场景,核心逻辑简单高效,时间复杂度低。