第十三周项目3-Dijkstra算法的验证

图之从一个顶点到其余各个顶点的最短路径(有向图) 目录 从一个顶点到其余各个顶点最短路径的简介 举例以及详细分析 代码块 测试结果 从一个顶点到其余各个顶点最短路径的简介1.定义概览Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法是很有代表性的最短路径算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论, 阅读详情

问题及代码:

/*
* Copyright(c)2016,烟台大学计算机学院 
* All right reserved. 
* 文件名称:ccc.cbp 
* 作者:陈梦雪
* 完成日期;2016年11月25日 
* 版本号;v1.0 
* 问题描述:验证Dijkstra算法
* 输入描述:无
* 程序输出:测试数据
*/  


测试用图:


头文件及功能函数见【图基本算法库】

main.cpp

#include <stdio.h>
#include <malloc.h>
#include "graph.h"
#define MaxSize 100

void Ppath(int path[],int i,int v)  //前向递归查找路径上的顶点
{
    int k;
    k=path[i];
    if (k==v)  return;          //找到了起点则返回
    Ppath(path,k,v);            //找顶点k的前一个顶点
    printf("%d,",k);            //输出顶点k
}

void Dispath(int dist[],int path[],int s[],int n,int v)
{
    int i;
    for (i=0; i<n; i++)
        if (s[i]==1)
        {
            printf("  从%d到%d的最短路径长度为:%d\t路径为:",v,i,dist[i]);
            printf("%d,",v);    //输出路径上的起点
            Ppath(path,i,v);    //输出路径上的中间点
            printf("%d\n",i);   //输出路径上的终点
        }
        else  printf("从%d到%d不存在路径\n",v,i);
}

void Dijkstra(MGraph g,int v)
{
    int dist[MAXV],path[MAXV];
    int s[MAXV];
    int mindis,i,j,u;
    for (i=0; i<g.n; i++)
    {
        dist[i]=g.edges[v][i];      //距离初始化
        s[i]=0;                     //s[]置空
        if (g.edges[v][i]<INF)      //路径初始化
            path[i]=v;
        else
            path[i]=-1;
    }
    s[v]=1;
    path[v]=0;              //源点编号v放入s中
    for (i=0; i<g.n; i++)               //循环直到所有顶点的最短路径都求出
    {
        mindis=INF;                 //mindis置最小长度初值
        for (j=0; j<g.n; j++)       //选取不在s中且具有最小距离的顶点u
            if (s[j]==0 && dist[j]<mindis)
            {
                u=j;
                mindis=dist[j];
            }
        s[u]=1;                     //顶点u加入s中
        for (j=0; j<g.n; j++)       //修改不在s中的顶点的距离
            if (s[j]==0)
                if (g.edges[u][j]<INF && dist[u]+g.edges[u][j]<dist[j])
                {
                    dist[j]=dist[u]+g.edges[u][j];
                    path[j]=u;
                }
    }
    Dispath(dist,path,s,g.n,v);     //输出最短路径
}

int main()
{
    MGraph g;
    int A[6][6]=
    {
        {0,50,10,INF,45,INF},  
        {INF,0,15,INF,5,INF},  
        {20,INF,0,15,INF,INF},  
        {INF,20,INF,0,35,INF},  
        {INF,INF,INF,30,0,INF},  
        {INF,INF,INF,3,INF,0}, 
    };
    ArrayToMat(A[0], 6, g);
    Dijkstra(g,0);
    return 0;
}


运行结果:





Dijkstra算法的Matlab程序,有例子验证。 Dijkstra算法的Matlab程序,用于求各点之间的最短路距离。该程序解决了一个有九个点的无向图中求任意两点之间最短路距离的例子。程序中的每一步都有详细说明。 立即下载

相关推荐

MFC校园导航图 可视化校园地图

黑龙江大学数据结构课程设计 大作业 MFC可视化校园导游图 能够计算最短路径和显示图片

13周-(3)Dijkstra算法的验证

问题及代码: Dijkstra算法的验证(使用图2作为测试用例)    #include #include #include "graph.h" #define MaxSize 100 void Ppath(int path[],int i,int v) //前向递归查找路径上的顶点 { int k; k=path[i]; if (k==v) return;

luguoca的博客 430

任意两个顶点之间的最短路径_Floyd算法_C语言

Floyd算法又称为弗洛伊德算法,插点法,是一种用于寻找给定的加权图中顶点间最短路径的算法。

第13周实践项目-Dijkstra算法

问题及代码 /* *Copyright (c) 2015,烟台大学计算机学院 *All rights reserved. *文件名称:test.cpp *作者: 王敏 *完成日期:2015年11月23日 *版本号:v1.0 * *问题描述:Dijkstra算法的验证 *输入描述: 程序输出: */ #include "graph.h" #defin

lalala_wm的博客 623

dijkstra算法R语言

本人R语言写的,可运行,且正确的dijkstra算法

试设计一个算法,求图中一个源点到其他各顶点的最短路径

试设计一个算法,求图中一个源点到其他各顶点的最短路径。 (1)用邻接表表示图; (2)按长度非递减次序打印输出最短路径的长度及相应路径。

xxxccc

gpf1987的专栏 1万+

模拟电子技术课设-压控信号发生器

正弦波产生电路的目的就是使电路产生一定频率和幅度的正弦波,我们一般在放大电路中引入正反馈,并创造条件,使其产生稳定可靠的振荡。由于图2.3-1所示电路中存在RC电路和积分电路两个延迟环节,在实用电路中,将它们“合二为一”,即去掉方波发生电路中的RC回路,使积分运算电路即作为延迟环节,又作为方变三角波电路,滯回比较器和积分运算电路的输出互为另一个电路的输入。接着对各单元电路的工作原理进行了分析,由直流稳压电源电路提供所需电压,文氏振荡器产生正弦波,滞回比较器产生方波,滞回比较器与积分器连接产生三角波。

Sulfurone的博客 5325

让我奇怪的左连接测试

自认为已经了解Oracle左连接的用法,结果真正使用时发现完全不能按照应有的形式展现出来,就这么一个语句耗费了大半个小时才成功完成,并且不确认为什么会产生这样的结果,特写下过程,一防自己再次犯错,二也希望有人能够帮我深入了解...

cuijiao4733的博客 682

基于SHIS凝视型短波红外高光谱相机(900-1700nm)区分不同宝石的差异性和可分性(宝石分选)

SHIS系列凝视型高光谱相机基于液晶可调谐滤波器(LCTF),通过电控LCTF进行连续细分窄波段分光,对每个波段进行高分辨率的二维面阵成像,进行图像处理后,获得完整的高光谱高清图像序列。具有低功耗、小型化、使用方便和易于扩展的优势。其工作波段覆盖400nm至1000nm,能够捕捉宝石在不同波长下的光谱特征,为宝石鉴定提供了新的工具。

wayho的博客 710

保姆级教程:手把手教你从NASA Earthdata下载ASTER L2地表温度数据(附shp文件拖拽技巧)

本文提供了一份详细的NASA Earthdata平台ASTER L2地表温度数据下载教程,涵盖账号注册、数据筛选、shp文件拖拽技巧及质量检查等关键步骤。特别适合遥感领域初学者,帮助快速掌握高效获取ASTER L2T数据的方法,适用于城市热岛效应和农业监测等研究。

weixin_30736301的博客 470

第十三周项目3 Dijkstra算法的验证

问题及描述: /*  *Copyright(c++)2015,烟台大学计算机与控制工程学院  *All rights reserved,  *文件名称:graph.cpp  *作    者:程梦莹  *完成日期:2015年11月23日  *版本号:v1.0  *问题描述: Dijkstra算法的验证(使用图2作为测试用例) *结果输出: */ 附:测试用图结构

cmy0106的博客 507

西门子博图TIA Portal V18实战:用LAD梯形图快速上手一个电机启停控制程序

本文详细介绍了如何在西门子博图TIA Portal V18中使用LAD梯形图快速实现电机启停控制程序。从项目创建、硬件组态到LAD编程和仿真调试,逐步引导读者掌握PLC编程的核心逻辑,特别适合工业自动化领域的初学者快速上手。

weixin_30617737的博客 690

第十三周项目3 Dijkstra算法验证

/*       * Copyright (c)2016,烟台大学计算机与控制工程学院       * All rights reserved.       * 文件名称:项目.cpp       * 作    者:王晓慧       * 完成日期:2016年11月24日       * 版 本 号:v1.0        *问题描述:验证Dijkstra算法   *输入描述:无

wangxiaohui6128的博客 317

基于PINN求解裂纹扩展问题的优化开发

本文提出了一种基于物理信息神经网络(PINN)的裂纹扩展问题求解方法。通过将线弹性断裂力学控制方程和裂纹尖端场特性嵌入神经网络损失函数,PINN有效克服了传统有限元法在处理裂纹扩展时面临的网格重构困难、计算成本高等问题。文章详细介绍了PINN网络架构设计、裂纹尖端奇异场处理、损失函数构造以及优化策略等关键技术。数值实验表明,该方法能准确预测裂纹扩展路径和应力强度因子,且在处理复杂几何和动态扩展问题时展现出显著优势。相比传统方法,PINN具有无网格、并行计算友好等特点,为断裂力学问题提供了新的求解范式。

huanghm88的专栏 155

计算机视觉安防监控升级:人脸识别与行为异常检测

计算机视觉安防监控升级:人脸识别与行为异常检测 ,人工智能,计算机视觉,大模型,AI,本文将深入探讨人脸识别与行为异常检测技术在安防监控中的应用,包括技术原理、算法实现、应用场景以及面临的挑战与解决方案。通过实际案例和代码示例,帮助读者更好地理解和掌握这些技术,为推动安防监控系统的智能化升级提供参考。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 23万+

第十三周项目3—Dijkstra算法的验证

copyright (c) 2016,烟台大学计算机学院   All rights reserved.   文件名称:1.cpp   作者:孟令康  完成日期:2016年9月12日   版本号:v1.0   问题描述:验证Dijkstra算法(从一个顶点到另一个顶点的最短路径)  代码 main.cpp: #include #include #include

mlk5739_csdn的博客 350

YOLOv11的代数不变量解释:Syzygy模分析特征重要性,用交换代数揭示卷积核的语义相关性

本文提出了一种基于代数几何与交换代数的创新方法,特别是运用Syzygy模理论,对YOLOv11目标检测算法的卷积核语义相关性进行数学解释。研究揭示了YOLO系列算法演进背后的代数结构特征,建立了网络组件与多项式环、理想簇等代数概念的对应关系。通过构建分层的准同构代数系统,分析了YOLOv11在不同尺度下保持语义不变性的数学本质。文章系统阐述了Syzygy模在CNN特征冗余分析、跨层依赖关系建模和语义聚类中的应用,并提出了适用于动态稀疏训练的改进算法。该理论框架为深度神经网络的解释性研究提供了新的数学工具,同

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1272

第十三周项目3 Dijkstra算法的验证

/* * Copyright (c)2015,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名称:第十三周项目3.cpp * 作    者:彭子竹 * 完成日期:2015年11月30日 * 版 本 号:v1.0 * 问题描述:Dijkstra算法的验证。 * 输入描述:无 * 程序输出:测试数据 */ 测试图: 代码: #in

pzz19960418的博客 340

恒玄BES调试笔记-BES2500如何Dump Anc Audio数据

从YP的4M flash改HP3的2M flash只需要改: 原工程:target.mk的export FLASH_SIZE ?= 0x200000和common.mk里的KBUILD_CPPFLAGS += -DNEW_IMAGE_FLASH_OFFSET=0x100000 OTA工程:target.mk的NEW_IMAGE_FLASH_OFFSET ?= 0x100000和FLASH_SIZE ?= 0x200000 ...

leezs的博客 1672

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

第十三周 项目3-Dijkstra算法的验证

/*   *Copyright(c) 2015, 烟台大学计算机学院   *All rights reserved.   *文件名称:Dijkstra算法的验证.cpp   *作    者:周洁   *完成日期:2015年 11月27日   *版 本 号:   *   *问题描述:Dijkstra算法的验证  *输入描述:若干数据  *输出描述:若干数据 */

zj2558562310的博客 328

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

第十三周 项目3 Dijkstra算法的验证

/*问题及代码 *Copyright(c)2016,烟台大学计算机学院 *All right reserved. *文件名称:Dijkstra算法的验证.cpp *作者:王力源 *时间:2016年11月24日 *版本号;v1.0 *问题描述: Dijkstra算法的验证 *输入描述:带权图的邻接矩阵 *程序输出:点到点的最短长度以及其路径 */ #

wly16885885的博客 401

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

上一篇: 第十三周项目2-Kruskal算法的验证
下一篇: 第十三周项目4-Floydu算法的验证
小太阳陈陈
博客等级 码龄10年 5粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值