
最短路径(迪杰斯特拉求法)
邻接矩阵初始化:首先,初始化一个邻接矩阵 权值数组初始化:创建一个数组 设置起始点:将起始点的权值初始化为0,并标记为已访问。 优先队列处理:使用优先队列(如堆)来处理点,优先处理权值最小的点。 更新最短路径:对于每个处理的点,更新其未访问邻点的最短路径,直到所有点都被访问或没有更短路径。 初始化数组: 优先处理点:使用优先队列处理权值最小的点,更新其邻点的最短路径。 终止条件:当无法找到更短路径时(即权值为无穷大),终止算法。
发布日期:2021-05-07 02:33:28
浏览次数:38
分类:精选文章
本文共 1251 字,大约阅读时间需要 4 分钟。
Dijkstra算法实现
Dijkstra算法是一种广泛使用的最短路径算法,适用于图中从单一起始点到所有其他点的最短路径计算。以下是该算法的实现思路和步骤:
生成初始化数组
p
,用于存储图中各点之间的权值。pre
,用于存储从起始点到各点的当前最短路径权值。算法步骤
代码实现
int pre[n]; // 存储当前点的最短路径权值int p[n][n]; // 邻接矩阵void djex(int x, int n) { int i, j, k, min; int final[1005]; // 标记已访问点 for (i = 1; i <= n; ++i) { pre[i] = p[x][i]; // 初始化权值数组 final[i] = 0; // 初始化标记 } pre[x] = 0; // 起始点自身权值为0 final[x] = 1; // 标记为已访问 for (i = 1; i < n; ++i) { min = INF; k = x; for (j = 1; j <= n; ++j) { if (!final[j] && pre[j] < min) { k = j; min = pre[j]; } } if (min == INF) break; // 无路可走 final[k] = 1; // 标记当前点为已访问 for (j = 1; j <= n; ++j) { if (!final[j] && pre[k] + p[k][j] < pre[j]) { pre[j] = pre[k] + p[k][j]; } } } printf("%d", pre[n]);}
代码解释
pre
数组存储从起始点到各点的当前最短路径权值,final
数组用于标记点是否已访问。这个实现通过Dijkstra算法高效地计算了从起始点到所有其他点的最短路径,适用于大规模图的最短路径问题。
发表评论
最新留言
关注你微信了!
[***.104.42.241]2025年04月08日 11时25分15秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Python 简明教程 --- 20,Python 类中的属性与方法
2019-03-06
KNN 算法-理论篇-如何给电影进行分类
2019-03-06
Spring Cloud第九篇 | 分布式服务跟踪Sleuth
2019-03-06
CODING 敏捷实战系列课第三讲:可视化业务分析
2019-03-06
工作动态尽在掌握 - 使用 CODING 度量团队效能
2019-03-06
CODING DevOps 深度解析系列第二课报名倒计时!
2019-03-06
数据结构第八节(图(下))
2019-03-06
基于Mustache实现sql拼接
2019-03-06
POJ 2260 Error Correction 模拟 贪心 简单题
2019-03-06
gRPC在 ASP.NET Core 中应用学习(一)
2019-03-06
@SuppressWarnings 用法
2019-03-06
看完你就明白的锁系列之锁的状态
2019-03-06
看完这篇操作系统,和面试官扯皮就没问题了
2019-03-06
我的价值观
2019-03-06
一文详解 Java 并发模型
2019-03-06
值类型与引用类型(中)
2019-03-06
MSSQL 2005 数据库变成可疑状态
2019-03-06
QBlog V2.5 源码开放下载(ASP.NET 番外系列之开端)
2019-03-06
秋色园引发CPU百分百命案的事件分析与总结
2019-03-06
安装jdk并配置环境变量
2019-03-06