还是按照书上的例子:

完整代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MaxInt 32767//无穷值设置
#define MVNum 100 //图的最大容量 ,也可以称为图的最大顶点数 void Interrupt(void)//创建一个中断函数
{while(1)//用于检测换行符,使函数脱离scanf的连续输出 if(getchar()=='\n')break;
} typedef struct//图的结构体
{char vexs[MVNum];//顶点表 int arcs[MVNum][MVNum];//邻接矩阵 int vexnum,arcnum;//图的当前点数和边数
}AMGraph;void InitGraph(AMGraph &G)//图的初始化
{int i,j;for(i = 0;i<MVNum;i++)for(j = 0;j<MVNum;j++)G.arcs[i][j] = MaxInt;//使邻接矩阵中的数据都初始化为0
}void CreateGraph(AMGraph &G)//图的创建
{int i;//记录次数 char a;//顶点变量 printf("请输入顶点数和边数:");scanf("%d %d",&G.vexnum,&G.arcnum);Interrupt();//该函数用于检测并吸收换行符 printf("请输入顶点名称(连续输入):");for(i=0;i<G.vexnum;i++){scanf("%c",&a);G.vexs[i] = a;//第i个顶点的命名 }Interrupt();//该函数用于检测并吸收换行符char b,c;//顶点变量 int w,j,k;//w为权值变量,j和k是用来记录次数的 for(i=0;i<G.arcnum;i++){printf("请输入边的两个顶点和权值w:");scanf("%c %c %d",&b,&c,&w);//输入 Interrupt();//该函数用于检测并吸收换行符for(j=0;j<G.vexnum;j++){if(G.vexs[j] == b)//找到输入的顶点b的位置 break;}for(k=0;k<G.vexnum;k++){if(G.vexs[k] == c)//找到输入的顶点c的位置 break;}G.arcs[j][k] = w;//权值赋值 }
}void InputGraph(AMGraph G)//邻接矩阵的输出
{int i,j;//记录次数 printf("邻接矩阵为:\n   ");for(i=0;i<G.vexnum;i++)//打印顶点名称 printf("%c  ",G.vexs[i]);printf("\n");for(i=0;i<G.vexnum;i++){printf("%c  ",G.vexs[i]);//打印顶点名称 for(j=0;j<G.vexnum;j++)//遍历邻接矩阵 printf("%d  ",G.arcs[i][j]);printf("\n");}
}void ShortestPath_DIJ(AMGraph G,int v0)//用Dijkstra算法求有向图G的v0到其余顶点的最短路径
{int i,n,v,min,w;//下面所用到的所有变量 n = G.vexnum;//顶点个数 bool S[n];//辅助数组S[]的定义 int D[n],Path[n];//辅助数组D[]和Path[]的定义 for(v=0;v<n;v++)//辅助数组的初始化 {S[v] = false;D[v] = G.arcs[v0][v];if(D[v]<MaxInt)Path[v] = v0;elsePath[v] = -1;}S[v0] = true;D[v0] = 0;//初始化结束 for(i=1;i<n;i++)//对其余n-1个顶点,依次进行计算 {min = MaxInt;//暂定最小权值 for(w=0;w<n;w++)if(!S[w] && D[w]<min){v = w;min = D[w];//选择一条从v0出发的最短路径,终点为v }S[v] = true;//用于记录已选择过 for(w=0;w<n;w++)//更新从v0出发到集合V-S上所有顶点的最短路径长度 if(!S[w] && (D[v]+G.arcs[v][w]<D[w])){D[w] = D[v]+G.arcs[v][w];//更新D[w] Path[w] = v;//更新w的前驱为v }}//打印辅助数组最后结果 for(i=0;i<n;i++)//打印D[] printf("D[%d]=%d  ",i,D[i]);printf("\n");for(i=0;i<n;i++)//打印Path printf("Path[%d]=%d  ",i,Path[i]);printf("\n");
}int main()
{AMGraph G;InitGraph(G);//图的初始化 CreateGraph(G);//创建邻接矩阵 InputGraph(G);//输出邻接矩阵ShortestPath_DIJ(G,0);//Dijkstra算法,数字0可换成变量,这里是测试 return 0;
}

结果演示:
辅助数组的初始化结果

代码运行结果

(完)

图的最短路径--迪杰斯特拉算法 c语言相关推荐

  1. 最短路径迪杰斯特拉算法 c语言,Dijkstra第K最短路径算法

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 //运筹学之最短路径 #include #include #define M 99999 int main() { int G[100][100]; in ...

  2. 狄斯奎诺算法 c语言,图的邻接表实现迪杰斯特拉算法(C语言).doc

    图的邻接表实现迪杰斯特拉算法(C语言) /*迪杰斯特拉算法(狄斯奎诺算法)解决的是从源点到其它所有顶点的最短路径问题*/ //算法实现: #include #include #define MAX 2 ...

  3. 狄斯奎诺算法 c语言,图的邻接表实现迪杰斯特拉算法(C语言)

    图的邻接表实现迪杰斯特拉算法(C语言). 迪杰斯特拉算法(狄斯奎诺算法)解决的是从源点到其它所有顶点的最短路径问题. 图的邻接表实现迪杰斯特拉算法(C语言) /*迪杰斯特拉算法(狄斯奎诺算法)解决的是 ...

  4. >算法笔记-动态规划-最短路径迪杰斯特拉算法

    算法笔记-动态规划-最短路径迪杰斯特拉算法 作者:星河滚烫兮 前言   图的最短路径问题在现实生活中有很广阔的应用,最短路径又分为单源最短路径与多源最短路径,前者求出固定起点到其他节点的最短路径,后者 ...

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

    最短路径是在工程上经常用到的概念,在这里给出了从单源点到任意顶点的迪杰斯特拉算法. 先来看看基本概念: 用代码C语言实现如下: #include<string.h>#include< ...

  6. 迪杰斯特拉算法c语言6,C语言迪杰斯特拉实现最短路径算法.doc

    数据结构课程设计报告 ----旅游咨询系统设计 目录 一.需求分析- 2 - 二.系统分析- 2 - 三.概要设计- 3 - 一.系统划分- 3 - 二.邻接矩阵建立流程图:- 3 - 三.迪杰斯特拉 ...

  7. 别说了,世界那么大我想去看看!(最短路径-迪杰斯特拉算法弗洛伊德算法)

    前言: 一直想去外面的世界看看,中国城市那么多,那么美,怎么样才可以用最少的钱,最短的时间游遍我想去的城市呢?(我在做梦?不不不!迪杰斯特拉算法和弗洛伊德算法来了)      这两个算法有着广泛的用途 ...

  8. 算法提升:图的Dijkstra(迪杰斯特拉)算法

    目录 概念 思路 代码 概念 迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路 ...

  9. 迪杰斯特拉算法c语言要点,C语言迪杰斯特拉实现最短路径算法要点.doc

    C语言迪杰斯特拉实现最短路径算法要点.doc 数据结构课程设计报告 ----旅游咨询系统设计 目录 一.需求分析- 2 - 二.系统分析- 2 - 三.概要设计- 3 - 一.系统划分- 3 - 二. ...

最新文章

  1. python清除字符串中间空格的方法
  2. 一道面试题,我自己的解法
  3. 《斑点狗眼里的世界》一书的铅笔画插图
  4. 的注册表怎么才能删干净_油烟净化器怎么清洗才能清理干净呢?
  5. 冯·诺依曼计算机特点
  6. 潭州课堂25班:Ph201805201 爬虫高级 第三课 sclapy 框架 腾讯 招聘案例 (课堂笔记)...
  7. windows server2008 r2 下启用 sqlserver 2008的远程连接
  8. [转载] Python学习之Numpy
  9. 32G内存oracle内核设置,浅谈安装ORACLE时在Linux上设置内核参数的含义
  10. 文字和表单(checkbox/radio)元素垂直对齐方法,兼容Firefox和IE。
  11. spark安装及环境配置(win10)
  12. 免费前端网站页面模板
  13. 数学建模之秩和比综合评价方法(RSR)
  14. 黑塞矩阵和雅克比矩阵
  15. ubuntu20.04装机教程
  16. 计算机找不到 bitlocker,win7找不到bitlocker怎么解决?-在win7中查找bitlocker驱动器加密的方法 - 河东软件园...
  17. C++核心准则​SL.con.1:标准库array或vector好于C数组
  18. 显卡内存管理机制及驱动实现(Intel gma500为例)
  19. JWT Token、ID Token、Access Token、Refresh Token
  20. 怎么删除计算机的打印机设备,win7系统的打印机删除不掉怎么办?完美解决方法看这里!...

热门文章

  1. 小学计算机教案第一册,小学信息技术第一册(上)的教学计划
  2. 如何使用轻量应用服务器搭建Veno File Manager个人私有云网盘?
  3. R3LIVE:一个实时鲁棒、带有RGB颜色信息的激光雷达-惯性-视觉紧耦合系统(香港大学)
  4. 想了解Python中用于图像处理的OpenCV基础知识吗?
  5. Excel中 IFERROR 函数 可以错误值#N/A、#value变成空格
  6. 游戏开发中的坑之六 烘焙光照神器Bakery - GPU Lightmapper
  7. Cloudera CDH 常见的版本
  8. 【田渊栋报告】游戏中的人工智能:成就与挑战 | ICML WorkShop(46PPT)
  9. 深度学习——day9(外 Q1 2021)基于多尺度特征融合的深度监督卷积神经网络路面裂缝检测
  10. limit 与offset的用法