最短路径(Dijkstra)

C++ 有向图最短路径之Dijkstra算法 一、思路 1.Dijkstra算法 每次都是从起始顶点v出发,找与v有关的有向边<v,u>。找到<v, u>之后,找有向边<u,k>,如果通过绕过顶点u而使从v到k的路径更短的话,就要修改v到k的路径。即v->u>k的路径比v->k的路径更短。 如上面的有向图:起始顶点为0 (1)先将顶点... 阅读详情
#include<iostream>

using  namespace  std;

typedef  char VertexType;
typedef  int EdgeType;

const  int   MAXVEX = 100;
const  int   INFINITY = 65535;

typedef  int Patharc[MAXVEX];
typedef  int shortPathTable[MAXVEX];

typedef  struct
{
    VertexType  vexs[MAXVEX];
    EdgeType    arc[MAXVEX][MAXVEX];
    int numVertexes,numEdges;
}MGraph;


//D记录V0点到其他顶点的路劲总权值,P记录所经过哪些点
void  ShortestPath_Dijkastra(MGraph *G,Patharc *P,shortPathTable *D)
{
    int i , j, k, min;
    int final[MAXVEX];
    for(i = 0;i < G->numVertexes;++i)
    {
        (*D)[i] = G->arc[0][i];
        (*P)[i] = 0;
        final[i] = 0;
    }
     final[0] = 1;
     for(i = 0;i < G->numVertexes;++i)
     {
         min = INFINITY;
         for(j = 0;j < G->numEdges;++j)
         {
             if(!final[j] && (*D)[j] < min)
             {
                 k = j;
                 min = (*D)[j];
             }
         }
         final[k] = 1;
         for(j = 0;j < G->numEdges;++j)
         {
             if(!final[j] && (min + G->arc[k][j]) <  (*D)[j])
             {
                 (*D)[j] = min + G->arc[k][j];
                 (*P)[j] = k;
             }
         }
     }
}


/*
建立无向网图的邻接矩阵表示
*/

void  CreateMGraph_Undirected(MGraph *G)
{
    int i,j,k,w;
    cin>>G->numVertexes>>G->numEdges;
    for(i = 0;i < G->numVertexes;++i)//输入顶点
    {       
        cin>>G->vexs[i];
    }

    for(i = 0;i < G->numVertexes;++i)//初始化邻接矩阵,除对角线元素 = 0,其余为INFINITY;
    {
        for(j = 0;j < G->numVertexes;++j)
        {
            if(i == j)
            {
                G->arc[i][j] = 0;
            }
            else
            {
                G->arc[i][j] = INFINITY;
            }
        }
    }

    for(k = 0;k < G->numEdges;++k)//完成邻接矩阵的填写工作
    {
        cin>>i>>j>>w;
        G->arc[i][j] = G->arc[j][i] = w;
    }
}

void  ShowMGraph(MGraph *G)//打印图的信息
{
    cout<<"图的顶点,边数为:"<<G->numVertexes<<","<<G->numEdges<<endl;
    cout<<"邻接矩阵为:"<<endl;
    
    for(int i = 0;i < G->numVertexes;++i)
    {
        for(int j = 0;j < G->numVertexes;++j)
        {
            if(G->arc[i][j] == INFINITY)
            {
                cout<<"#  ";
            }
            else
            {
                cout<<"  "<<G->arc[i][j]<<"  ";
            }
        }
        cout<<endl;
    }
}




int main()
{
    MGraph *G = new MGraph();
    Patharc P;
    shortPathTable D;
    CreateMGraph_Undirected(G);
    ShowMGraph(G);
    ShortestPath_Dijkastra(G,&P,&D);
    delete G;
}


Dijkstra算法求最短路径(java) 任务描述:在一个无向图中,获取起始节点到所有其他节点的最短路径描述 Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。 Dijkstra一般的表述通常有两种方式,一种用永久和临时标号方式,一种是用OPEN, CLOSE表方式 用OPEN,CLOSE表的方式,其采用的是贪心法的 阅读详情

相关推荐

Dijkstra的最短路径算法

Given a graph and a source vertex in the graph, find shortest paths from source to all vertices in the given graph. Dijkstra’s algorithm is very similar to Prim’s algorithm for minimum spanning tree. ...

weixin_41697507的博客 2万+

数据结构-图

数据结构-图 2021/8/12 22:51 图的储存结构 1.邻接矩阵法 #include <iostream> using namespace std; typedef char VertexType; typedef int EdgeType; #define MaxVertexNum 100//顶点数目的最大值 #define INFINITY 最大的int值 //宏定义常量无穷 typedef struct { VertexType Vex[MaxVertexNum]; EdgeT

dalao_whs的博客 336

图的dijkstar路径算法及详细代码说明

typedef int Patharc[MAXVEX];//定义一个数组用于存储最短路径下标的数组,即最短路径构成的“队列”顺序 typedef int ShortPathTable[MAXVEX];//用于保存到某点最短路径的权值和

数据结构——邻接矩阵创建无向图,图的深度遍历

1.完整代码 #include<iostream> using namespace std; #define OK 1 #define ERROR 0 #define MaxInt 0 #define MVNum 100 //最大顶点数 #define Max 20 typedef char VerTexType; //顶点的数据类型为字符型 typedef int ArcType; //权值类型为整形 typedef int Status; typedef str

weixin_43752912的博客 2547

python爬虫抖音 个人资料 仅供学习参考 切勿用于商业

本文仅供学习参考 切勿用于商业 本次爬取使用fiddler+模拟器(下载抖音APP)+pycharm 1. 下载最新版本的fiddler(自行百度下载),以及相关配置 1.1.依次点击,菜单栏-Tools-Options-HTTPS,如图1红框打钩,HTTPS旁边Connections配置,如图2红框打钩 1.2.再次点击HTTPS栏,点击Actions选择第二个…to ...

dbva7063的博客 1491

MediaCodec视频解码流程详解及参考demo

本文主要讲解mediacodec的视频解码流程,及demo参考例子。

分享音视频技术 7876

c语言实现顺序表的增删改查

#include <iostream> using namespace std; #define MAXSIZE 100 #define Elemtype Book typedef struct { char no[20]; char name[50]; float price; } Book; typedef struct { //顺序表 ...

AlbertChenTao的博客 873

7系列ZYNQ硬件调试:Vitis无法识别ARM DAP的排查与解决

本文针对7系列ZYNQ开发中Vitis无法识别ARM DAP的典型硬件调试问题,提供了系统性的排查与解决方案。文章深入剖析了问题本质,指出ARM DAP无法访问的核心原因在于PS部分的电源、时钟或复位等硬件基础条件未满足,并重点强调了PS参考时钟(如33.333MHz晶振)的完整性是关键排查点。通过从电源完整性、时钟与复位信号到JTAG连接与焊接的逐步硬件排查,并结合软件配置交叉验证,为开发者提供了清晰的故障定位思路与实战指南。

weixin_29280657的博客 627

数据结构之图的应用(二)之最短路径

前面我们一期文章我们分享了图的应用中的一种——最小生成树。现在我们开始来讲讲第二种

m0_63932570的博客 1031

帆软js--获取控件和单元格

参数面板: 获取面板控件 ,name为控件名称:_g().parameterEl.getWidgetByName("name") 取值:_g().parameterEl.getWidgetByName("tt3").getValue()2323 赋值:_g().parameterEl.getWidgetByName("tt2").setValue("987") 调用对应的事件比...

江湖行骗老中医 7198

Doris实战——结合Flink构建极速易用的实时数仓

Doris实战——结合Flink构建极速易用的实时数仓

爱吃辣条的博客 8233

图算法——求最短路径(Dijkstra算法)

图解Dijkstra算法,让你了解Dijkstra算法的每一步是怎么进行的

在夜里行走的博客 13万+

Python爬虫抓取淘宝商品详情页信息:从入门到高级技术应用

通过本篇博客,我们了解了如何使用Python爬虫抓取淘宝商品详情页的信息,如何使用requests和Selenium抓取静态和动态内容,如何应对淘宝的反爬虫机制,如何将抓取的数据保存到CSV文件等。随着爬虫技术的不断发展,开发者可以根据需要选择合适的工具和技术,如使用分布式爬虫框架提高抓取效率,或者利用OCR技术处理验证码等问题。在进行淘宝爬虫时,需要注意遵循相关法律法规和平台的爬虫政策,避免对平台造成过度的负担或侵犯其合法权益。

2201_76125261的博客 462

Dijkstra算法——单源最短路径查找

单源最短路径的查找——Dijkstra 算法

qq_61500888的博客 8100

RK3568下GPIO模拟串口

在嵌入式开发中,硬件 UART 资源可能被其他外设占用。此时,通过 GPIO 模拟 UART(软串口)成为一种灵活的解决方案。本文基于 RK3568 平台,结合 Linux 内核模块,实现高精度软串口通信,并深入分析关键技术细节。可以看到已经接收到数据了,可以自己创建自定义的设备文件到/dev下,也可以按照串口设备的标准创建一个设备,后面有时间我写一篇和标准串口设备结合的gpio模拟串口文章。RK3568 GPIO 模拟串口(软串口)实现详解。将编译好的驱动放到板子上运行。再写个Makefile。

文石_2009的博客 364

【Power Compiler手册】13.UPF多电压设计实现(2)

在这个场景中,在约束传播期间,工具会比较BLOCK中的原子电源域与TOP设计中的原子电源域,并且确认所有属性都匹配。因此,域合并成功,工具会丢弃来自BLOCK的域。在这个场景中,在约束传播期间,工具会比较BLOCK中的原子电源域与TOP设计中的非原子电源域,发现电源域不匹配。在这个场景中,在约束传播期间,工具会比较BLOCK中的非原子电源域与TOP设计中的原子电源域,发现电源域不匹配。在这个场景中,在约束传播期间,工具会比较BLOCK中的原子电源域与TOP设计中的原子电源域,发现它们的一些属性不匹配。

QRBQ 751

最短路径问题——Dijkstra算法

摘要:Dijkstra算法是解决单源最短路径问题的经典算法,适用于带权非负有向/无向图。其优点包括高效性(O((V+E)logV))、确定性和实现简单,但无法处理负权边且内存消耗较大。算法通过维护距离数组和优先队列,逐步将"蓝点"转为"白点"来更新最短路径。核心思路是利用中转点优化路径,最终得到源点到所有顶点的最短距离。典型的应用场景包括网络路由等需要快速计算最短路径的领域。

2303_79102751的博客 1957

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

最短路径 Dijkstra算法

小博今天又给大家更新了,最近学习过程中在最短路径问题上被两个比较……我们暂且认定比较恶心的算法难倒了好一会,不过最后还是攻克了,在这里小博写下自己的心得和大家分享一下 **最短路径:**网路中两个不同顶点之间的所有路径中边的权值之和最小的那一条 ...

weixin_42154057的博客 1420

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

DIJKSTRA最短路径算法

这个也是最短路径算法,在严巍敏的书上也有提到过,具体的思想忘记了,(老了*0*)和FLOYD算法做个对照,记得他们各有优缺点,一个是从全局出发,一个是从局部生成的。很强大的算法。 C代码如下:#include #define INF 32767 #define FALSE 0 #define TRUE 1 #define MAXN 8 typedef

轩辕寒星的专栏 1907

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

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

Dijkstra—求最短路径(图论,附例题、代码)

在解决带权有向图的最短路径中,Dijkstra算法(迪杰斯特拉)用于解决单源有向图的最短路径问题。我们把一张有向图的起始称为源点,结束称为终点,最短路径就是从源点到终点所经历的最小权值之和。本文将介绍Dijkstra算法的原理和实用案例。PS.如果你是为了今天的每日一题来的,那么你找对地方了,因为本人也是特地来恶补的)Dijkstra算法的主要思想是贪心,每次将选中距离源点最近的点,并不断更新。

xiaoyuuoo的博客 1万+

dijkstra算法_最短路径算法—Dijkstra算法详解

介绍对于dijkstra算法,很多人可能感觉熟悉而又陌生,可能大部分人比较了解bfs和dfs,而对dijkstra和floyd算法可能知道大概是图论中的某个算法,但是可能不清楚其中的作用和原理,又或许,你曾经感觉它很难,那么,这个时候正适合你重新认识它。Dijkstra能是干啥的?Dijkstra是用来求单源最短路径的就拿上图来说,假如直到的路径和长度已知,那么可以使用dijkstra算法计算南京...

weixin_39788960的博客 3534

Dijkstra算法(最短路径)

U为源点 S为未添加数组 邻接矩阵存放的是权值,创建dist[]数组,用来存放结点间的距离,首先将v结点加入U集合,之后更新dist[]数组的数值,再在U-S集合中找到一个权值最小的结点x,遍历x这一行,查看x到各个结点的距离,当x结点到m结点距离为5,此时用这个5去和dist[]数组到x的距离相加,如果相加得到的值比dist[]数组中的值小,则用这个值更新diist[]数组中到m中的权重值 ; 再次在dist[]数组中找最短路径**在dist数组中找最短路径是在未添加的数组值那查找,已经添加到源点的...

DL猿 1万+

Dijkstra 算法:迷路?交给 Dijkstra,最短路径迎刃而解!

如果你要从你家(假设是图中的 A 点)出发,去一个从没去过的城市(假设是图中的 D 点),而城市之间的道路长短不一。这就像你在玩超级玛丽游戏,每一次你选择走的路线都是最短、最快的,直到你打败所有的敌人,走到最终胜利——到达目的地。通过每次选择最短的路径,Dijkstra 算法帮助我们找到从一个点到其他所有点的最短路径,避免了冤枉路。它能帮助你解决这个问题,让你在复杂的路网中找到最短的路径。就是我们生活中“导航”的算法——它帮助你从出发点开始,选择一条最短的路径,一步步到达目的地。你是不是想到了手机地图?

小蒋聊技术 921

最短路径求解(Dijkstra算法)

1. 问题描述(问题来自于PAT A 1003Emergency) As an emergency rescue team leader of a city, you are given a special map of your country. The map shows several scattered cities connected by some roads. Amount of ...

二哈 2863

最短路径问题—Dijkstra算法和Floyd算法

最短路径问题一般分为两类:一是单源最短路径,即求图中某一顶点到其他顶点的最短路径,可通过Dijkstra(迪杰斯特拉)算法求解;二是求每一对顶点间的最短路径,可通过Floyd( 弗洛伊德)算法求解。

24考研人晴落的博客 5185

单源最短路径-Dijkstra算法

写在前面:好久没看图论了,今天写作业的时候发现我已经忘记了。俗话说的好,好记性不如烂笔头,我翻了翻之前的笔记,竟然没有关于Dijkstra的(手动狗头)。赶紧连夜写了一篇博客,只为勾引我对Dijkstra的些许记忆。 单源最短路径-Dijkstra算法 从一个顶点到其余各顶点的最短路径算法,解决的是有权图(不存在负权边)中最短路径问题 1.算法思想 它是由E.W.Dijkstra提出的一种按照路径长度递增的次序分别产生到各顶点最短路径的贪心算法。     &nbs.

Huberyxiao的博客 1193
上一篇: 最小生成树(kruskal算法)
下一篇: My——atoi(进制,空格,符号,溢出等处理),最全最细,有问题请问我
恩嗯
博客等级 码龄8年 47粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值