图的邻接表实现迪杰斯特拉算法(C语言)

/*迪杰斯特拉算法(狄斯奎诺算法)解决的是从源点到其它所有顶点的最短路径问题*/

//算法实现:

#include

#include

#define MAX 20

#define MAX_FLOAT_NUM 1000 /*最大浮点数(假设最大浮点数是1000)*/

typedef int infoType; /*定义边表结点权值的数据的数据类型*/

typedef int vertexType; /*定义顶点结点上存储的数据的数据类型*/

//定义边表结点结构体

typedef struct edgenode {

int adjvertex; //边表结点域

infoType info; //边表结点权值,这里存放的是其父结点到该结点的距离

struct edgenode *next; //指向下一个邻接点的指针域

} EdgeNode;

//定义顶点结点结构体

typedef struct vertexnode {

vertexType boolval; /* 顶点结点域,这里存放的是该结点是否找到其距源顶点最短路径的标记,

若找到最短路径,则该值为1,否则该值为0 */

EdgeNode *firstedge; //边表头指针

} VertexNode;

typedef struct {

VertexNode adjlist[MAX]; /*邻接表*/

int vertexNum; /*顶点数*/

int edgeNum; /*边数*/

} ALGraph; //adjacency list graph:邻接表

/**************************************************************

函数名称:CreateGraph

函数功能:创建邻接表

输入:顶点数vertexNum,边数edgeNum

输出:指向已创建好的邻接表的指针

**************************************************************/

ALGraph* CreateGraph(int vertexNum, int edgeNum) {

int k;

EdgeNode *p;

//声明图的邻接表

ALGraph *G;

G = (ALGraph *)malloc(sizeof(ALGraph));

if (!G) {

G = NULL;

}

else {

G->vertexNum = vertexNum;

G->edgeNum = edgeNum;

//建立顶点表

for (k = 0; k < G->vertexNum; k ++) {

G->adjlist[k].boolval = 0; /*boolval值判断该结点到源结点的距离是否是最短距离,是1表示已达最短距离,是0表示还没有达最短距离*/

G->adjlist[k].firstedge = NULL;

}

//建立边表

printf("请输入顶点、其邻接顶点和权值信息:\n");

for(k = 0; k < G->edgeNum; k ++) {

int i, j;

infoType info;

//表现的是边的关系,有多少对就有多少边,所以for循环次数为G->edgeNum

scanf("%d,%d,%d",&i,&j,&info);

if (i != j) {

p = (EdgeNode *)malloc(sizeof(EdgeNode));

p->next = G->adjlist[i].firstedge;

G->adjlist[i].firstedge = p;

p->adjvertex = j;

p->info = info;

}

}

}

return G;

}

/**************************************************************

函数名称:dijkstra(迪杰斯特拉/迪斯奎诺)

函数功能:实现迪杰斯特拉算法,找出每个顶点到源定点u的最短距离

输入:邻接表指针G,源顶点u,记录每个顶点到源顶点的最短距离的数组d[],到源顶点的最短路径上的前方顶点编号p[]

输出:记录每个顶点到源顶点的最短距离的数组d[],到源顶点的最短路径上的前方顶点编号p[]

**************************************

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

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

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

  2. 图的应用——最短路径(迪杰斯特拉算法)

    Content 1. 什么是最短路径 2. 迪杰斯特拉算法[O(n^2^)] 3. 代码 4. 迪杰斯特拉算法 VS 普利姆算法 1. 什么是最短路径 在一个带权有向图中,从某一顶点到另一顶点可能有很 ...

  3. 图的最短路径之(迪杰斯特拉算法)python实现

    前面我们已经了解到了无环有向图怎样求关键路径的方法,今天我们来看看无向图怎样求最短路径,这在实际应用过程中的作用很大,不如交通路线图,从出发点到终点,走哪条路用时最短,或者花费最少等问题. 我们先来看 ...

  4. c语言迪杰斯特拉算法求最短路径,迪杰斯特拉 ( Dijkstra ) 最短路径算法

    迪杰斯特拉算法介绍 迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径.它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止. 基本 ...

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

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

  6. 《计算机网络自顶向下》之重头戏迪杰斯特拉算法

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

  7. 迪杰斯特拉算法详解+模版+例题

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

  8. 算法与数据结构(六) 迪杰斯特拉算法的最短路径(Swift版)

    上篇博客我们详细的介绍了两种经典的最小生成树的算法,本篇博客我们就来详细的讲一下最短路径的经典算法----迪杰斯特拉算法.首先我们先聊一下什么是最短路径,这个还是比较好理解的.比如我要从北京到济南,而 ...

  9. c++ 遍历所有点且距离最短_图解:最短路径之迪杰斯特拉算法

    小禹禹们,你们好,景禹最近已经开学,忙着准备毕业答辩的事情,这才抽身个大家更新文章,还请莫怪.生活实属不易,有时候让人有点儿焦头烂额,甚至想让景禹放弃继续更新文章,可是千百号人默默地关注者景禹,当然也 ...

最新文章

  1. Spark入门教程(二)Spark2.2源码编译及安装配置
  2. Android热修复技术原理详解(最新最全版本)
  3. js防止表单重复提交
  4. CentOS中vsftp安装、配置、卸载
  5. 彭荣新:喜马拉雅自研网关架构演进过程
  6. python怎么退出全屏_wxPython:退出全屏
  7. 如何在win10系统上安装linux子系统
  8. js 异步执行_js执行机制:同步与异步(宏任务与微任务)
  9. web本地开发环境集成工具:​​​​MAMP Pro
  10. Openstack 笔记概要
  11. 多御安全浏览器使用技巧,剖析7大优点特性
  12. vue-d2admin前端axio异步请求详情
  13. 说话干嘛要“之道”啦?(持续更新中)
  14. 一文读懂ICO、IFO、IMO、IEO的区别,或许是全网最全科普
  15. Blender摄像机环绕运动、动画渲染、视频合成
  16. LOGO 8.3 Web Server功能
  17. android 卡联系人导入iphone,苹果手机怎么把通讯录导入新手机sim卡
  18. SCI-EI-收录-检索-出版商 之间的关系
  19. XDU-OJ-C语言-Test 2
  20. Thingsboard Build踩坑(一)

热门文章

  1. WPF中自定义窗体标题栏
  2. Linux单磁盘根分区扩容(非LVM)
  3. 多个常见代码设计缺陷
  4. sed 正则表达式【MAC地址】GLPI转换华为交换机MAC格式
  5. iOS开发网络篇—网络请求(HTTP协议)小结(转)
  6. JVM是怎么判断不可用对象的
  7. 常见文件、目录、路径操作函数
  8. UltiDev Cassini Web Server介绍
  9. 加窗Fourier变换算法的C++实现
  10. 支持向量机—核函数源码分析(2)