最短路径——迪杰斯特拉算法——图的数据结构

最短路径是在工程上经常用到的概念,在这里给出了从单源点到任意顶点的迪杰斯特拉算法。

先来看看基本概念:

 

用代码C语言实现如下:

#include<string.h>#include<ctype.h>#include<malloc.h> /* malloc()等 */#include<limits.h> /* INT_MAX等 */#include<stdio.h> /* EOF(=^Z或F6),NULL */#include<stdlib.h> /* atoi() */#include<io.h> /* eof() */#include<math.h> /* floor(),ceil(),abs() */#include<process.h> /* exit() *//* 函数结果状态代码 */#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */typedef int Boolean; /* Boolean是布尔类型,其值是TRUE或FALSE */#define MAX_NAME 5 /* 顶点字符串的最大长度 */typedef int InfoType;typedef char VertexType[MAX_NAME]; /* 字符串类型 *//* c7-2.h 图的邻接表存储表示 */#define MAX_VERTEX_NUM 20typedef enum{DG,DN,AG,AN}GraphKind; /* {有向图,有向网,无向图,无向网} */typedef struct ArcNode{int adjvex; /* 该弧所指向的顶点的位置 */struct ArcNode *nextarc; /* 指向下一条弧的指针 */InfoType *info; /* 网的权值指针) */}ArcNode; /* 表结点 */typedef struct{VertexType data; /* 顶点信息 */ArcNode *firstarc; /* 第一个表结点的地址,指向第一条依附该顶点的弧的指针 */}VNode,AdjList[MAX_VERTEX_NUM]; /* 头结点 */typedef struct{AdjList vertices;int vexnum,arcnum; /* 图的当前顶点数和弧数 */int kind; /* 图的种类标志 */}ALGraph;
typedef int VRType;typedef char InfoType;typedef char VertexType[MAX_NAME];
typedef int PathMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];typedef int ShortPathTable[MAX_VERTEX_NUM];void ShortestPath_DIJ(MGraph G,int v0,PathMatrix *P,ShortPathTable *D){ /* 用Dijkstra算法求有向网G的v0顶点到其余顶点v的最短路径P[v]及带权长度 *//* D[v]。若P[v][w]为TRUE,则w是从v0到v当前求得最短路径上的顶点。 *//* final[v]为TRUE当且仅当v∈S,即已经求得从v0到v的最短路径 算法7.15 */int v,w,i,j,min;Status final[MAX_VERTEX_NUM];for(v=0;v<G.vexnum;++v){final[v]=FALSE;(*D)[v]=G.arcs[v0][v].adj;for(w=0;w<G.vexnum;++w)(*P)[v][w]=FALSE; /* 设空路径 */if((*D)[v]<INFINITY){(*P)[v][v0]=TRUE;(*P)[v][v]=TRUE;}}(*D)[v0]=0;final[v0]=TRUE; /* 初始化,v0顶点属于S集 */for(i=1;i<G.vexnum;++i) /* 其余G.vexnum-1个顶点 */{ /* 开始主循环,每次求得v0到某个v顶点的最短路径,并加v到S集 */min=INFINITY; /* 当前所知离v0顶点的最近距离 */for(w=0;w<G.vexnum;++w)if(!final[w]) /* w顶点在V-S中 */if((*D)[w]<min){v=w;min=(*D)[w];} /* w顶点离v0顶点更近 */final[v]=TRUE; /* 离v0顶点最近的v加入S集 */for(w=0;w<G.vexnum;++w) /* 更新当前最短路径及距离 */{if(!final[w]&&min<INFINITY&&G.arcs[v][w].adj<INFINITY&&(min+G.arcs[v][w].adj<(*D)[w])){ /* 修改D[w]和P[w],w∈V-S */(*D)[w]=min+G.arcs[v][w].adj;for(j=0;j<G.vexnum;++j)(*P)[w][j]=(*P)[v][j];(*P)[w][w]=TRUE;}}}}void main(){int i,j,v0=0; /* v0为源点 */MGraph g;PathMatrix p;ShortPathTable d;CreateDN(&g);ShortestPath_DIJ(g,v0,&p,&d);printf("最短路径数组p[i][j]如下:\n");for(i=0;i<g.vexnum;++i){for(j=0;j<g.vexnum;++j)printf("%2d",p[i][j]);printf("\n");}printf("%s到各顶点的最短路径长度为:\n",g.vexs[0]);for(i=1;i<g.vexnum;++i)printf("%s-%s:%d\n",g.vexs[0],g.vexs[i],d[i]);}

 

算法时间复杂度:O(n^{2})。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/482100.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

盖亚假说:地球是一个生命体吗?

来源&#xff1a;微信公众号“集智俱乐部”原文&#xff1a;Is the Earth an organism?https://aeon.co/essays/the-gaia-hypothesis-reimagined-by-one-of-its-key-sceptics。撰文&#xff1a;W Ford Doolittle翻译&#xff1a;Leo审校&#xff1a;赵雨亭在漫长的地球生物的演…

拓扑排序和关键路径

一&#xff1a;拓扑排序 前面讲过拓扑排序只是简单的描述&#xff0c;下面具体的实现。 用顶点表示活动&#xff0c;用弧表示活动间的优先关系的有向图为AOV网。 AOV网中没有环&#xff0c;检测的办法是进行拓扑排序。 步骤&#xff1a; (1)在有向图中选一个没有前驱的顶点…

Science:睡眠医学的突破,大脑会在梦境中巩固积极情绪

来源&#xff1a;学术头条处理情绪&#xff0c;特别是区分危险和安全&#xff0c;对动物的生存至关重要。在人类中&#xff0c;过度的负面情绪&#xff0c;如恐惧反应和焦虑状态&#xff0c;会导致创伤后应激障碍&#xff08;PTSD&#xff09;等病理状态。在欧洲&#xff0c;就…

RISC-V可能不会威胁英特尔,但Arm需警惕

来源&#xff1a;EETOP近期&#xff0c;国外媒体The Register对RISC-V International 首席执行官Calista Redmond 进行了一次采访&#xff0c;在访谈中&#xff0c;Calista Redmond谈及英特尔不太担心自己的x86业务&#xff0c;因此成为了RISC-V ISA联盟的白金会员。Redmond还谈…

超越 GPT-3,DeepMind 推出新宠 Gato,却被质疑“换汤不换药”?

出品&#xff1a;CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;整理&#xff1a;慧中 责编&#xff1a;屠敏受大规模语言建模的启发&#xff0c;Deepmind应用类似的方法构建了一个单一的「通才」智能体 Gato&#xff0c;它具有多模态、多任务、多具身&#xff08;…

拓扑排序和关键路径课程设计

目录 1. 设计任务书... 3 1.1设计任务... 3 1.2程序功能... 3 1.3运行环境... 3 2. 本组课题... 3 2.1课题... 3 2.2本人任务... 3 3.程序功能简介... 4 3.1拓扑排序算法分析... 4 3.2关键路径算法分析... 4 4.功能实现分析... 5 4.1拓扑排序功能... 5 4.1.…

2万字超长干货,MIT人工智能实验室:如何做研究?

来源&#xff1a;人工智能前沿讲习译者&#xff1a;柳泉波 北京师范大学信息学院2000级博士生 当你初入江湖&#xff0c;迷茫不知道该干什么的时候&#xff0c;不妨去模仿前人是如何进行科研的&#xff0c;并从中归纳出最适合自己的道路。为此&#xff0c;我们推出“学术人生”…

重磅!DeepMind新作Gato:一个模型、一套权重通吃600+视觉文本和决策任务!

来源&#xff1a;量子位&#xff08;QbitAI&#xff09;作者&#xff1a;梦晨 鱼羊通用人工智能&#xff0c;还得看DeepMind。这回&#xff0c;只一个模型&#xff0c;使用相同的权重&#xff0c;不仅把看家本领雅达利游戏玩得飞起。和人类聊聊天、看图写话也不在话下。甚至还能…

WEB3.0是营销概念?能否代表科技未来趋势的主流

来源&#xff1a;刘锋科学网博客作者 &#xff1a;刘锋链接地址&#xff1a;https://blog.sciencenet.cn/blog-39263-1339334.html本文是根据微信交流的内容整理形成&#xff0c;算是一个随笔&#xff0c;反映了个人的一些观点&#xff0c;未必正确&#xff0c;仅供参考。根据目…

JDKjavac的配置

Path变量&#xff0c;一定要写绝对路径名&#xff0c;不要写相对路径名&#xff0c;写本地的jdk的bin目录和jdk中jre的bin目录&#xff0c;这个win10做的很好&#xff0c;直接写就可以&#xff0c;用不同的变量代替了一个变量&#xff0c;中间还要加分号的尴尬&#xff0c;中间…

Nature:类脑计算亟需宏大蓝图

来源&#xff1a;集智俱乐部作者&#xff1a;A. Mehonic & A. J. Kenyon翻译&#xff1a;任卡娜 审校&#xff1a;JawDrin 编辑&#xff1a;邓一雪 导语与日俱增的算力需求下&#xff0c;现代计算系统能耗也越来越高&#xff0c;很难作为可持续的平台支持人工智能技术的未来…

Sublime Text 3无法安装Package Control插件的解决

QUESTION:Sublime Text 3无法安装Package Control插件的解决? ANSWER: 为了更准确的定位问题&#xff0c;建议插件在安装前开启控制台&#xff08;快捷键Ctrl~&#xff09;,同时在开启debug模式&#xff0c;这样可以在安装过程中了解哪一步出了问题&#xff0c;然后有针对性…

JAVA:线程总结及多线程实现的两种方法

JAVA&#xff1a;线程总结 目录 目录 JAVA&#xff1a;线程总结 JAVA&#xff1a;线程总结 01_多线程(多线程的引入)(了解) 02_多线程(多线程并行和并发的区别)(了解) 03_多线程(Java程序运行原理和JVM的启动是多线程的吗)(了解) 04_多线程(多线程程序实现的方式1)(掌握…

WEB3.0 能否代表科技未来趋势的主流

来源&#xff1a;刘锋科学网博客作者 &#xff1a;刘锋链接地址&#xff1a;https://blog.sciencenet.cn/blog-39263-1339334.html本文是根据微信交流的内容整理形成&#xff0c;算是一个随笔&#xff0c;反映了个人的一些观点&#xff0c;未必正确&#xff0c;仅供参考。根据目…

网线制作,集线器、交换机、路由器的介绍以及路由器的设置

目录 一. 网线制作 1.1 制作材料 1.2 网线标准 1.3 网线做法 二. 集线器、交换机、路由器介绍 前言 简介 简单来说 三. 路由器的设置 设置1 设置2 设置3 设置4 无线设置 一. 网线制作 1.1 制作材料 网线 …

谷歌AI提出双重策略强化学习框架,帮助机器人安全学习动作技能

来源&#xff1a;AI前线作者&#xff1a;Jimmy&#xff08;Tsung-Yen&#xff09; Yang译者&#xff1a;Sambodhi策划&#xff1a;凌敏深度强化学习在自主解决复杂、高维问题方面的前景&#xff0c;引起了 机器人、游戏 和 自动驾驶汽车 等领域的极大兴趣。但是&#xff0c;要想…

美国发布20项重大科技趋势,将在未来30年改变世界!

来源&#xff1a;DeepTech深科技&#xff08;ID&#xff1a;mit-tr&#xff09;编辑&#xff1a;net百晓生这份报告是美国陆军公布的一份长达35页的《2016-2045年新兴科技趋势报告》。它是美国在过去几年由政府机构、咨询机构、智囊团、科研机构等发表的32份科技趋势相关研究调…

对话式人工智能发展的真正限制是人类的耐心

来源&#xff1a;AI前线 作者&#xff1a;Jiang Chen&#xff0c;Moveworks 机器学习副总裁译者&#xff1a;王强策划&#xff1a;刘燕从 Siri 到 Alexa 再到谷歌助手&#xff0c;今天我们已经被各种人工智能系统包围了。它们的设计目标只有一个&#xff1a;理解我们。我们已经…

Nature子刊:科学家在类脑芯片上实现类似LSTM的功能,能效高1000倍

来源&#xff1a;机器学习研究组订阅格拉茨技术大学的计算机科学家在 Nature 子刊上发表的一篇论文表明&#xff0c;他们找到了一种在神经形态芯片上模拟 LSTM 的方案&#xff0c;可以让类脑神经形态芯片上的 AI 算法能效提高约 1000 倍。随着智能手机的普及&#xff0c;手机游…

重磅!0.2nm路线图来了!详细讲解技术实现!

来源&#xff1a;tomshardware编译&#xff1a;EETOP世界上最先进的半导体研究机构 Imec 最近在比利时安特卫普举行的未来峰会上分享了其亚1nm和晶体管路线图。该路线图让我们大致了解了到 2036 年Imec将在其实验室与台积电、英特尔、三星和 ASML 等行业巨头合作研发的下一个主…