首页 > 编程语言 >简单的Dijkstra算法运用

简单的Dijkstra算法运用

时间:2024-11-20 15:14:23浏览次数:3  
标签:路径 dist 源点 算法 Dijkstra num path 运用

Dijkstra算法常用于求单源点最短路径问题


基本思想

将顶点集合V分成两个集合,一类是生长点的集合S,包括源点和已经确定最短路径的顶点;另一类是非生长点的集合V—S,包括所有尚未确定最短路径的顶点,并使用一个待定路径表,存储当前从源点V到每个非生长点V的最短路径。


 Dijkstra算法基于的存储结构

  1. 图的存储结构:在算法执行过程中,需要快速求得 任意两顶点之间边的权值,所以,图采用邻接矩阵存储。
  2. 辅助数组dist[n]:其表示当前所找到的从源点V到终点的最短路径长度。初态为:若从V到v有有弧,则dist[i]为弧上的权值;否则置dist[i]为∞。若当前求得的终点为v,则进行迭代dist[i]=min{dist[i],dist[k]+edge[k][i]} 0<=i<=n-1
  3. 辅助数组path[n]:元素path[n]是一个字符串,表示当前从源点V到终点v的最短路径。
  4. 集合S:若某顶点v的最短路径已经求出,则将dist[k]置为0

伪代码 

 


 函数定义

 

void Dijkstra(int v)
{
int i,k,num,dist[Maxsize]
string path[Maxsize];
for(i = 0; i < vertexNum; i++)
{
dist[i] = edge[v][i];
if (dist[i] != 100)
path[i] = vertex[v] + vertex[i];
else path[i] = " ";
}
for (num = 1; num < vertexNum; num++)
{
k = Min(dist, vertexNum);
cout<<path[k]<<dist[k];
for (i = 0; i < vertexNum; i++)
  if (dist[i] > dist[k] + edge[k][i])
{
      dsit[i] = dist[k] + edge[k][i];
      path[i] = path[k] + vertex[i];
}
dist[k] = 0;
}
}

标签:路径,dist,源点,算法,Dijkstra,num,path,运用
From: https://blog.csdn.net/2303_80739301/article/details/143895015

相关文章

  • 【MATLAB代码】基于IMM(Interacting Multiple Model)算法的目标跟踪,所用模型:CV、CA、CT
    文章目录3个模型的IMM(代码简介)源代码运行结果代码介绍总结3个模型的IMM(代码简介)本MATLAB代码实现了基于IMM(InteractingMultipleModel)算法的目标跟踪。它使用三种不同的运动模型(匀速直线运动、左转弯和右转弯)来预测目标的位置,并通过卡尔曼滤波进行状态估计。源代......
  • PHP顺序查找和二分查找(也叫做折半查找)算法
    顺序查找(线性查找)顺序查找是一种简单直观的查找算法,从数组的第一个元素开始,依次比较每个元素,直到找到目标元素或数组结束。<?phpfunctionlinearSearch($array,$target){$length=count($array);for($i=0;$i<$length;$i++){if($array[$i]==......
  • PHP二维数组排序算法函数
    以使用PHP内置的array_multisort()函数来对二维数组进行排序。array_multisort()函数可以对多个数组或多维数组的一个或多个列进行排序。下面是一个示例函数,该函数可以对二维数组按指定列进行排序:<?phpfunctionsort2DArrayByColumn(&$array,$columnKey,$sortOrder=SORT_......
  • 机器学习笔记——KNN(K-Nearest Neighbors,K 近邻算法)
    本笔记介绍机器学习中的KNN(K-NearestNeighbors,K近邻算法)文章目录思想工作原理K值选择交叉验证类似K-means的肘部法经验选择法/奇数优先加权KNN距离度量欧氏距离(EuclideanDistance)特点曼哈顿距离(ManhattanDistance)特点切比雪夫距离(ChebyshevDistance)特点......
  • 基于蚁群算法实现图像边缘检测——Matlab代码实现
    图像边缘检测是计算机视觉领域中的一个重要问题,它在图像处理、模式识别、目标跟踪等方面具有广泛的应用,本文将介绍一种基于蚁群算法实现的图像边缘检测方法,并提供相应的Matlab代码实现。蚁群算法是一种模拟自然界蚂蚁觅食行为的优化算法,其具有自适应、高效等优点,在图像边缘......
  • 微电网经济调度算法优化——基于两阶段鲁棒优化方法
    微电网的能源管理模式是未来能源系统发展的一个趋势,而微电网的经济调度算法也成为了目前研究的热点之一,在此介绍一种基于两阶段鲁棒优化方法的微电网经济调度算法,并提供相应的MATLAB代码。该算法具有以下特点:所提出的算法具备较强的鲁棒性和可靠性,能够有效地应对能源价格......
  • 上机实验三:C4.5(带有预剪枝和后剪枝)算法实现与测试
    fromsklearn.datasetsimportload_irisfromsklearn.model_selectionimporttrain_test_split,cross_val_score,StratifiedKFoldfromsklearn.treeimportDecisionTreeClassifierfromsklearn.metricsimportaccuracy_score,precision_score,recall_score,f1_score#......
  • (带有预剪枝和后剪枝)算法实现与测试
    一、实验目的 深入理解决策树、预剪枝和后剪枝的算法原理,能够使用Python语言实现带有预剪枝和后剪枝的决策树算法C4.5算法的训练与测试,并且使用五折交叉验证算法进行模型训练与评估。  二、实验内容 (1)从scikit-learn库中加载iris数据集,使用留出法留出1/3的样......
  • 逻辑回归算法实现与测试
    逻辑回归算法实现与测试一、实验目的 深入理解对数几率回归(即逻辑回归的)的算法原理,能够使用Python语言实现对数几率回归的训练与测试,并且使用五折交叉验证算法进行模型训练与评估。 二、实验内容 (1)从scikit-learn库中加载iris数据集,使用留出法留出1/3的样本作......
  • MATLAB实现WOA-CNN-GRU鲸鱼算法优化卷积门控循环单元时间序列预测
    目录项目背景介绍...1项目目标与意义...1项目挑战...1项目特点与创新...2项目应用领域...2项目效果预测图程序设计...2项目模型架构...3项目模型描述...3项目结构设计...6项目部署与应用...6项目扩展...6项目注意事项...7项目未来改进方向...7项目......