第十三周--从一个顶点到其余各顶点的最短路径

最短路径算法 在准备ACM比赛的过程中,研究了图论中一些算法。首先研究的便是最短路的问题。《离散数学》第四版(清华大学出版社)一书中讲解的Dijkstra算法是我首先研究的源材料。       如何求图中V0到V5的最短路径呢?         java实现的方式如下:         第一步,根据图来建立权值矩阵:        int[][] W = {      {  0,   阅读详情
/*
 *Copyright (c) 2015 烟台大学计算机与控制工程学院
 *All right reserved.
 *标题:数据结构实践——从一个顶点到其余各顶点的最短路径
 *作者:杨珺
 *date:2015年11月23日
 *版本:V1.0.1
 *操作系统:XP
 *运行环境:VC6.0
 *问题描述:用Dijkstra算法求解从一个顶点到其余各顶点的最短路径。
 */


用Dijkstra算法求解从一个顶点到其余各顶点的最短路径,用到图存储结构的“算法库”点击打开链接。

#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,INF,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], 7, g);
    Dijkstra(g,0);
    return 0;
}


运行结果:

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

相关推荐

Dijkstra算法——单源最短路径(指定一个节点(源点)到其余各个顶点的最短路径)

Dijkstra算法——单源最短路径。 每次找到距离源点最近的一个节点,然后以该节点为中心进行扩展,最终得到源点到其余所有点的最短路径。

qq_44423388的博客 9454

迪杰斯特拉算法(求最短路径)

迪杰斯特拉算法(求最短路径) 迪杰斯特拉算法用于查找图中某个顶点到其它所有顶点的最短路径,该算法既适用于无向加权图,也适用于有向加权图。 注意,使用迪杰斯特拉算法查找最短路径时,必须保证图中所有边的权值为非负数,否则查找过程很容易出错。 迪杰斯特拉算法的实现思路 图 1 是一个无向加权图,我们就以此图为例,给大家讲解迪杰斯特拉算法的实现思路。 图 1 无向加权图 假设用迪杰斯特拉算法查找从顶点 0 到其它顶点的最短路径,具体过程是: 统计从顶点 0 直达其它顶点的权值,如下表所示: 表 1 顶点 0

ccc369639963的博客 4万+

从一个顶点到其余各顶点的最短路径

问题及描述: /* * Copyright (c) 2015, 烟台大学计算机与控制工程学院 * All rights reserved. * 文件名称: graph.cpp,graph2.cpp,graph.h * 作者:高哲 * 完成日期:2015年11月23日 * 版本号:codeblocks

Katie466的博客 1790

难难难!如何求图的某一顶点到其他顶点最短距离?迪杰斯特拉Dijkstra和弗洛伊德Floyd要上场了

对于无权图来说,可以使用广度优先遍历算法BFS,实现求单源路径最短。但是,如果图带了权值,求这种最短路径可以通过经典的Dijkstra(迪杰斯特拉)算法或者是Floyd(弗洛伊德)算法来求解。当然,这两种算法也是不容易理解的。这里以简单直白的描述方式来介绍以上两种经典算法。 一、Dijkstra算法求单源最短路径问题 算法的核心是:循环遍历所有结点,找到还没有确定的最短路径,且dist最小的顶点Vi,令Final[i] = true,以此来判断是否已找到最短路径。 dist[]:记录从源点V0

Sunny5106的博客 1906

使用Dijkstra算法求由顶点a到顶点h的最短路径

通过Dijkstra计算图G中的最短路径时,需要指定起点s(即从顶点s开始计算)。 此外,引进两个集合S和U。S的作用是记录已求出最短路径的顶点(以及相应的最短路径长度),而U则是记录还未求出最短路径的顶点(以及该顶点到起点s的距离)。 初始时,S中只有起点s;U中是除s之外的顶点,并且U中顶点的路径是”起点s到该顶点的路径”。然后,从U中找出路径最短的顶点,并将其加入到S中;接着,更新U中的顶点和顶点对应的路径。 然后,再从U中找出路径最短的顶点,并将其加入到S中;接着,更新U中的顶点和顶点对应的路径。.

a1234567924的博客 4164

深度优先求无向图中顶点a到顶点i的最短路径

void Minway()//输出最短路径 { int min=10000; for(int i=0;i<allPath.size();i++) if(all[i]<min) min=all[i]; for(int j=0;j<allPath.size();j++) if(all[j]==min) cout<<"最短路径: "<<allPath[j]<<" 长度:"<<all[j]<<endl; cout<<endl; }

最短路径问题(Dijkstra算法)学习心得

一、前言 在离散数学的学习过程中,遇到了最短路径问题。Dijkstra算法求解单源最短路径本身不易理解,本文综合自己的理解试图给出Dijkstra算法形式化描述以及示例。 二、相关概念 最短路径问题:给定带权图G=&lt;V,E,W&gt;及节点u和v,其中每一条边e的权重W(e)为非负数,求从u到v的最短路径。 最短路径性质:如果 是从u到v的最短路径,则对每一个 , 是 的最短路径。(...

tanjie_123的专栏 6169

最短路径Dijkstra

程序采用迪杰特拉斯(Dijkstra)算法求解带权值的有向图中从某个起始节点到其它节点的最短路径。 开发环境:vs2013,.NET4.0

第十三周--数据结构-从一个顶点到其余各顶点的最短路径

/*   *第十三周--数据结构-从一个顶点到其余各顶点的最短路径   *Copyright (c) 2015 烟台大学计算机与控制工程学院   *All right reserved.   *writer:罗海员   *date:2015年12月07日   *问题描述: */ 运行所用的示例: 代码实现如下: #include #include #defi

Sailor_luo的博客 1042

从某个源点到其于各顶点的最短路径

从某个源点到其于各顶点的最短路径,单源点最短路径问题

调试GMS应用,报错“此设备未获得play保护机制认证”问题解决

不少同学在调试GMS相关应用时,需登录Google账号,有时会弹出如下通知。Google登录界面也会出现如下提示这个报错的原因是设备未通过Google认证,google服务器未配置荣耀设备的型号白名单导致国内网页有一些指导方法在鸿蒙\荣耀的设备上消除这个提示,但本质的问题没有解决,无法登录Google账号。

胡同老道的博客 2万+

第十三周 从一个顶点到其余各顶点的最短路径(Dijkstra算法)

/*  Copyright (c)2016,烟台大学计算机与控制工程学院  All rights reserved.  文件名称:从一个顶点到其余各顶点的最短路径.cpp 作    者:郝环宇 完成日期:2016.11.24 问题描述:用Dijkstra算法求解从一个顶点到其余各顶点的最短路径。 输入描述:若干测试数据。  程序输出:相应的数据输出。   /* 图基本算法库

Long_Mao000的博客 1843

BEVFusion(mit)最强环境安装,部署复现

BEVFusion作为一项经典的工作,值得深入探索。然而由于配置环境比较麻烦,耽误了一些时间。经过几次成功配置之后,有了一些总结,在这里记录下来,供大家参考避坑,也方便自己下次查阅。

qq_45783225的博客 1万+

第十三周 项目三 从一个顶点到其余各顶点的最短路径

/* *Copyright (c) 2016,烟台大学计算机学院 *All rights reserved. *文件名称:graph.cpp *作者:衣龙川 *完成日期:2016年12月8日 *版本号:vc++6.0 * *问题描述: 从一个顶点到其余各顶点的最短路径 *输入描述:无 *程序输出: */ graph.cpp:

yilongchuan的博客 544

数据增强综述及albumentations代码使用

数据增强综述及albumentations使用基于基本图形处理的数据增强 本文涉及到的资料: 1.A survey on Image Data Augmentation for Deep Learning 2.Albumentations: Fast and Flexible Image Augmentations 3.Code 基于基本图形处理的数据增强 1.翻转;2.旋转;3.仿射变换;4.色彩空间(RGB、YUV、CMY、HSV,在图像情感分析中会影响标签。最简单的方法就是只改变一个通道。对比度、直方

qq_41917697的博客 6680

modbus-esp8266库深度解析:工业级Modbus协议栈实现

Modbus是一种广泛应用于工业自动化领域的通用串行通信协议,其核心在于标准化的功能码、寄存器模型与帧结构设计。基于RTU、ASCII和TCP三种传输变体,Modbus协议通过主从架构实现设备间可靠数据交互,具备低开销、高兼容性与强实时性等技术价值。在边缘计算与工业物联网场景中,它被广泛用于PLC通信、传感器数据采集、HMI集成及远程固件升级(FOTA)等关键任务。针对ESP8266/ESP32等Wi-Fi微控制器平台,modbus-esp8266库提供了完整协议栈支持,涵盖多实例并发、回调驱动架构、零拷贝

weixin_42315569的博客 349

第十三周 项目3从一个顶点到其余各顶点的最短路径

(程序中graph.h是图存储结构的“算法库”中的头文件,详情请单击链接…) /* Copyright (c)2016,烟台大学计算机与控制工程学院 All rights reserved. 文件名称:图(2).cpp 作 者: 周国亮 完成日期:2016年11月24日 版 本 号:v1.0 问题描述: 输入描述:无 程序输出:若干 */ #include #include #in

编写博客,学习交流 604

GIS分析-利用K-Means方法进行地震分析

通过“聚类”可以获得有关我们所拥有的数据的各种线索,这是数据挖掘技术之一。分析创建的组有助于决策过程。在这项研究中,我们将使用数据挖掘工具之一的K-Means方法研究安纳托利亚东部地区近100年发生的地震的空间分布,并试图获得有用的信息,以供未来的研究使用。我从局地震目录页面获得了研究所需的地震数据,并从获得了区域边界数据。

gis收藏家的博客 1569

第十三周上机实践—项目1(3)—Dijkstra算法的验证,从一个顶点到其余各顶点的最短路径

/* *Copyright(c) 2015,烟台大学计算机学院 *All rights reserved. *文件名称:test.cpp *作者:林莉 *完成日期:2015年11月27日 *版本:v1.0 * *问题描述:Dijkstra算法的验证,构造出最小生成树; *输入描述:无 *输出描述:所得结果。 */ 1.头文件:

Lin1287的博客 771

Unity Sprite Atlas C++底层原理全解析 —— “像素聚合工厂”的秘密

Unity Sprite Atlas C++底层实现简析 Sprite Atlas是Unity中用于优化2D渲染性能的核心机制,其C++底层实现如同一个高效的"像素聚合工厂"。该系统通过将多个小纹理合并为一个大纹理,显著减少Draw Call次数和GPU纹理切换开销。 在数据结构上,底层采用SpriteAtlasData存储图集元数据,PackedTexture管理合并后的大纹理,SpriteFrame记录每个子精灵的位置信息,并通过哈希表实现快速查找。编辑器阶段使用最大矩形等算法优化空

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 204

最佳RANSAC算法拟合矩形的实现(基于PCL库)

最佳RANSAC算法是一种常用的参数估计方法,用于从数据集中拟合出最佳的模型。在计算机视觉和图像处理领域,最佳RANSAC算法常用于拟合几何形状,如矩形。本文将详细介绍如何使用点云库(PCL)中的最佳RANSAC算法来拟合矩形,并提供相应的源代码。

JbPatch的博客 1541

有向图之某个源点到其余各顶点的最短路径

1 生活中的实际问题 我们经常会计算从一个城市到另一个城市的交通费用,或者途中所需要的时间。比如,a城市到c城市,中间要经过b城市,a到b的时间是10,b到c的时间是20,或者也可以经过其他城市到c城市,总时间是不一样的。而要计算出最短的时间,考虑到交通的有向性,就可以化为解决有向图中某个顶点到其他顶点的最短路径,时间就是边的权值。并称路径上的第一个顶点为源点,最后一个顶点为终点。 2 讨论两

weixin_37885641的博客 1万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

图——从一个顶点到其余各顶点的最短路径——狄克斯特拉算法

/* *Copyright (c) 2015 , 烟台大学计算机学院 *All right resvered . *文件名称: Dijkstra算法.cpp *作 者: 郑兆涵 *图——从一个顶点到其余各顶点的最短路径——狄克斯特拉算法 */ 问题: 从一个顶点到其余各顶点的最短路径——狄克斯特拉算法 编程代码:

Henry's Blog 1万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

数据结构例程——从一个顶点到其余各顶点的最短路径

本文是[数据结构基础系列(7):图]中第13课时[从一个顶点到其余各顶点的最短路径]的例程。(程序中graph.h是图存储结构的“算法库”中的头文件,详情请单击链接…)#include <stdio.h> #include <malloc.h> #include "graph.h" #define MaxSize 100 void Ppath(int path[],int i,int v) //前

迂者-贺利坚的专栏 7994

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

上一篇: 第十三周--最小生成树的克鲁斯卡尔算法
下一篇: 第十三周--每对顶点之间的最短路径
杨珺
博客等级 码龄11年 31粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值