狄斯奎诺算法 c语言,图的邻接表实现迪杰斯特拉算法(C语言).doc
图的邻接表实现迪杰斯特拉算法(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相关推荐
- 狄斯奎诺算法 c语言,图的邻接表实现迪杰斯特拉算法(C语言)
图的邻接表实现迪杰斯特拉算法(C语言). 迪杰斯特拉算法(狄斯奎诺算法)解决的是从源点到其它所有顶点的最短路径问题. 图的邻接表实现迪杰斯特拉算法(C语言) /*迪杰斯特拉算法(狄斯奎诺算法)解决的是 ...
- 图的应用——最短路径(迪杰斯特拉算法)
Content 1. 什么是最短路径 2. 迪杰斯特拉算法[O(n^2^)] 3. 代码 4. 迪杰斯特拉算法 VS 普利姆算法 1. 什么是最短路径 在一个带权有向图中,从某一顶点到另一顶点可能有很 ...
- 图的最短路径之(迪杰斯特拉算法)python实现
前面我们已经了解到了无环有向图怎样求关键路径的方法,今天我们来看看无向图怎样求最短路径,这在实际应用过程中的作用很大,不如交通路线图,从出发点到终点,走哪条路用时最短,或者花费最少等问题. 我们先来看 ...
- c语言迪杰斯特拉算法求最短路径,迪杰斯特拉 ( Dijkstra ) 最短路径算法
迪杰斯特拉算法介绍 迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径.它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止. 基本 ...
- 算法提升:图的Dijkstra(迪杰斯特拉)算法
目录 概念 思路 代码 概念 迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路 ...
- 《计算机网络自顶向下》之重头戏迪杰斯特拉算法
迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题.迪杰斯特拉算法主要特 ...
- 迪杰斯特拉算法详解+模版+例题
迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题.迪杰斯特拉算法主要特 ...
- 算法与数据结构(六) 迪杰斯特拉算法的最短路径(Swift版)
上篇博客我们详细的介绍了两种经典的最小生成树的算法,本篇博客我们就来详细的讲一下最短路径的经典算法----迪杰斯特拉算法.首先我们先聊一下什么是最短路径,这个还是比较好理解的.比如我要从北京到济南,而 ...
- c++ 遍历所有点且距离最短_图解:最短路径之迪杰斯特拉算法
小禹禹们,你们好,景禹最近已经开学,忙着准备毕业答辩的事情,这才抽身个大家更新文章,还请莫怪.生活实属不易,有时候让人有点儿焦头烂额,甚至想让景禹放弃继续更新文章,可是千百号人默默地关注者景禹,当然也 ...
最新文章
- Spark入门教程(二)Spark2.2源码编译及安装配置
- Android热修复技术原理详解(最新最全版本)
- js防止表单重复提交
- CentOS中vsftp安装、配置、卸载
- 彭荣新:喜马拉雅自研网关架构演进过程
- python怎么退出全屏_wxPython:退出全屏
- 如何在win10系统上安装linux子系统
- js 异步执行_js执行机制:同步与异步(宏任务与微任务)
- web本地开发环境集成工具:​​​​MAMP Pro
- Openstack 笔记概要
- 多御安全浏览器使用技巧,剖析7大优点特性
- vue-d2admin前端axio异步请求详情
- 说话干嘛要“之道”啦?(持续更新中)
- 一文读懂ICO、IFO、IMO、IEO的区别,或许是全网最全科普
- Blender摄像机环绕运动、动画渲染、视频合成
- LOGO 8.3 Web Server功能
- android 卡联系人导入iphone,苹果手机怎么把通讯录导入新手机sim卡
- SCI-EI-收录-检索-出版商 之间的关系
- XDU-OJ-C语言-Test 2
- Thingsboard Build踩坑(一)