aes算法c语言实现_C语言实现常用数据结构:Dijkstra最短路径算法(第18篇)
「今天是学习C语言第 161 天」
纸上学来终觉浅,绝知此事要躬行。—— 陆游「冬夜读书示子聿」#题外话算法学习重点是学习如何编程使用它。
# Dijkstra算法
Dijkstra算法,中文译名迪杰斯特拉算法,求解有向图和无向图单源最短路径的算法,要求图中的边权重值必须是非负数(0或正数)。
给定图,图中有顶点和边权重值,给定一个源顶点,可以求出该顶点到其它所有顶点的最短路径,生成以源顶点为根的最短路径树。
该算法使用贪心的思想,基本思想如下:
1.创建一个数组集合set,保存已经计算出最短路径的顶点,开始时,该集合为空;
2.创建辅助数组dist,保存各个顶点的路径值,初始时指定的源顶点赋值为0,其余顶点赋值为无穷大;
3.迭代以下操作,直到所有顶点均被保存到集合set中。
- 选择数组中dist中路径值最小,并且未被包括在集合中的顶点u,保存到集合set;
- 依次更新顶点u的邻接顶点在数组dist中路径值,对于邻接顶点v,如果dist[u]+dist[u][v]的路径值小于当前dist[v]的值,则更新dist[v]。
备注:dist[u]表示源顶点到顶点u的路径值,set[u]=1表示顶点u已经计算,set[u]=0表示顶点u未计算。
# 运行结果
给定以下图,求源顶点0到其它各个顶点的最短路径距离。
源顶点编号是0.目标顶点编号 最短路径距离0 01 32 63 54 75 12--------------------------------Process exited after 0.5788 seconds with return value 0请按任意键继续. . .
# 算法实现
/*========================================== 名称 :C语言实现常用数据结构 功能 :Dijkstra最短路径算法 环境 :Windows 10 + Dev-C++编译 作者 :一只会C的猫 公众号 :C语言大全(coderpointer) 时间 :2020.9.23==========================================*/#include #include // 定义图中的顶点个数#define V 6void dijkstra(int graph[V][V], int src){ int dist[V], set[V]; // 初始化 int i; for (i = 0; i < V; i++) { dist[i] = INT_MAX; // 初始时顶点集合为空 set[i] = 0; } // 指定源顶点为起始顶点 // 源顶点到自身的路径值为0 dist[src] = 0; // 计算所有顶点的最短路径 int count; for (count = 0; count < V; count++) { // 选择最小路径的顶点 int u; int min = INT_MAX; int j; for (j = 0; j < V; j++) { if (!set[j] && dist[j] <= min) { min = dist[j]; u = j; } } // 将顶点u保存到集合 set[u] = 1; // 更新顶点u的邻接顶点路径值 int k; for (k = 0; k < V; k++) // 顶点k未被计算,顶点u和k之间有边 if (!set[k] && graph[u][k] && dist[u] != INT_MAX && dist[u] + graph[u][k] < dist[k]) dist[k] = dist[u] + graph[u][k]; } // 输出结果 printf("源顶点编号是%d.\n", src); printf("目标顶点编号 \t 最短路径距离\n"); for (i = 0; i < V; i++) printf("%d \t\t %d\n", i, dist[i]);}int main(void){ int graph[V][V] = { { 0, 3, 8, 0, 0, 0 }, { 3, 0, 0, 2, 4, 0 }, { 8, 0, 0, 1, 6, 0 }, { 0, 2, 1, 0, 0, 8 }, { 0, 4, 6, 0, 0, 5 }, { 0, 0, 0, 8, 5, 0 }}; dijkstra(graph, 0); return 0;}
---------- End ----------
往期精彩推荐:
一万分钟C语言学习计划:2020开篇
C语言内存管理的两种方式
C89标准库功能简介
C语言链接与存储类型
C语言标准输入输出
C语言入门基本语法
更多请点击公众号历史文章...
「喜欢C请赏个 赞 点击右下角 在看」
aes算法c语言实现_C语言实现常用数据结构:Dijkstra最短路径算法(第18篇)相关推荐
- 大话数据结构:最短路径算法
dijkstra最短路径算法 迪杰斯特算法的核心是首先正向把离起点最近的点一个一个找出来,然后从终点开始逆向计算最短路径 利用图数据结构实现dijkstra算法的伪代码如下 {记录所有点到起点的距离并 ...
- Dijkstra最短路径算法——java代码实现
具体的算法详解可以看这篇博客Dijkstra最短路径算法详解. 这里我利用.txt文件存储了有向加权图中顶点之间的连接关系以及边上的权重,文件格式如下: 代码所构造的有向加权图如下: package ...
- 算法学习(10):LeetCode刷题之Dijkstra最短路径算法
前言: 迪杰斯特拉(Dijkstra)最短路径算法是求有向加权图中某个节点到其他节点的最短路径."图"这种数据结构的具体实现就是"邻接矩阵"或者"邻接 ...
- 算法分析与设计课程设计-Dijkstra最短路径算法
算法分析与设计课程设计报告书 题目:Dijkstra最短路径算法 设计人:张钦颖 班级:14计科2班 学号:1414080901218 一. 实验环境: 1.硬件环境:个人机 ...
- c语言迪杰斯特拉算法求最短路径,迪杰斯特拉 ( Dijkstra ) 最短路径算法
迪杰斯特拉算法介绍 迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径.它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止. 基本 ...
- c语言是静态语言python语言是脚本语言吗_C语言还是Python语言哪个更好?
最近,很多人问我问题. C语言还是Python,哪个更好?实际上,没有什么好坏之分,而且由于Python的基本逻辑是用C语言实现的,因此它们都有自己的特点.如果您想了解更多信息,建议您先学习C语言,然 ...
- 常用数据结构与经典算法 简单讲解与示例代码
数据结构与算法 数据结构与算法是一个学习计算机绕不过去的话题,而我们大学之中多数课程之中都使用伪代码进行讲解,给对我们的学习理解也是一把双刃剑,虽然可以让我们自己通过算法.思路自己写出程序,但也可能& ...
- 【算法】机器人走迷宫(适用于走迷宫、最短路径算法)-20200412
标题:机器人走迷宫(适用于走迷宫.最短路径算法) 问题描述: 一块矩形方格,含有障碍和可通行格子,求从某一点到另外一点的最短距离?N*M的矩阵: 其中,1代表障碍,0代表可通行:示例:给定二维矩阵 0 ...
- Python 图_系列之纵横对比 Bellman-Ford 和 Dijkstra 最短路径算法
1. 前言 因无向.无加权图的任意顶点之间的最短路径由顶点之间的边数决定,可以直接使用原始定义的广度优先搜索算法查找. 但是,无论是有向.还是无向,只要是加权图,最短路径长度的定义是:起点到终点之间所 ...
最新文章
- pdf怎么转html?
- c语言有重复元素全排列,【求助】全排列 不重复 由小到大 输出 代码
- Angularjs API指令查询
- java类与对象实验_JAVA类与对象实验报告
- 关于WebRTC发展的担忧和思考
- 解决orcale报ORA-28001: the password has expired
- vue 生命周期_Vue生命周期小白看了都会的
- 爬取了 B 站上的 17398 条评论,分析这部二次元番剧为何受到技术宅的追捧?
- 代码质量管控的四个阶段
- 计算机图形学 dda,计算机图形DDA算法
- 美赛O奖、F奖论文写作技巧!【微信公众号:校园数模】
- 吃透String的intern方法
- 攻防世界----confusion1
- alpha测试什么意思,和Beta测试有何区别?
- 一篇关于批处理文件的经典文章
- 用JLINK烧写U-boot到Nand Flash中
- 单细胞文献学习(part2)--stPlus: a reference-based method for the accurate enhancement of ST
- 走近Harvest Moon:Moonbeam DeFi狂欢会
- CC2640R2F BLE5.0 蓝牙协议栈Off-Chip OAD功能
- 极客头条 | 5月14日科技要闻:百度贴吧 2017 前贴子无法访问;网易腾讯游戏获批;苹果反垄断案败诉