实验2-2Dijkstra算法

本文介绍了Dijkstra算法,用于求解图中一个节点到其他节点的最短路径。算法以起始点为中心向外扩展,逐步找到最短路径。通过初始化距离数组并不断更新最短路径,最终遍历所有顶点。实验中,从顶点a出发寻找到达顶点h的最短路径。算法的时间复杂度为O(N^3)。
摘要由CSDN通过智能技术生成

(1)问题

对于下图使用Dijkstra算法求由顶点a到顶点h的最短路径,按实验报告模板编写算法。

图一

(2)解析

迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径。
它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。

基本思想

  • 指定起点s(即从顶点s开始计算)。

  • 引进两个集合S和U。S的作用是记录已求出最短路径的顶点(以及相应的最短路径长度),而U则是记录还未求出最短路径的顶点(以及该顶点到起点s的距离)。

  • 初始时,S中只有起点s;U中是除s之外的顶点,并且U中顶点的路径是”起点s到该顶点的路径”。然后,从U中找出路径最短的顶点,并将其加入到S中;接着,更新U中的顶点和顶点对应的路径。
    然后,再从U中找出路径最短的顶点,并将其加入到S中;接着,更新U中的顶点和顶点对应的路径。

  • … 重复该操作,直到遍历完所有顶点。

本题中,起始点是a

(3)设计

  • 初始化数组dist,d和p(d和p分别表示未访问的和访问过的);

  • while(d中元素的个数)

  • 在dist[n]中求最小值,其编号为k;

  • 修改数组dist等;

  • 将顶点k添加到数组p中;

(4)分析

时间复杂度为O(N^3)

 for(i=1;i<=m;i++)
    {
   
        scanf("%d%d%d",&x,
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值