博客
关于我
C语言实现dijkstra(adjacence matrix)
阅读量:368 次
发布时间:2019-03-05

本文共 966 字,大约阅读时间需要 3 分钟。

单源最短路径算法Dijkstra的C语言实现

Dijkstra算法是一种高效的单源最短路径算法,广泛应用于交通网络、电网等领域。本文将介绍Dijkstra算法在C语言中的实现,使用邻接矩阵表示图结构。

代码结构如下:

#include <stdio.h>#include <limits.h>#include <stdbool.h>

#define V 9

int minDistance(int dist[], bool sptSet[]){int min = INT_MAX;int min_index = 0;for(int i=0; i<V; i++){if(!sptSet[i] && dist[i] < min){min = dist[i];min_index = i;}}return min_index;}

int dijkstra(int n, int graph[], bool sptSet[], int dist[]){int u, v;for(int i=0; i<n; i++){sptSet[i] = false;}dist[0] = 0;for(int i=0; i<n; i++){minDistance(dist, sptSet);if(dist[i] == INT_MAX){return -1; //无效图}u = minIndex;sptSet[u] = true;for(int j=0; j<n; j++){if(sptSet[j]){continue;}if(graph[u * n + j] < dist[j]){dist[j] = graph[u * n + j];minIndex = j;}}}return 0;}

Dijkstra算法通过维护一个距离数组和一个已访问数组,逐步更新各节点的最短距离。算法选择当前未访问且距离最小的节点进行处理,更新其邻居的最短距离。

图表示为邻接矩阵,每个节点的邻接信息存储在二维数组中。实现过程中,使用了minDistance函数来快速找到当前最小距离的节点,优化了算法性能。

代码中的dist数组存储各节点到起点的最短距离,sptSet数组记录已访问节点。通过迭代更新节点的最短距离,直到所有节点处理完毕。

该实现适用于稀疏图,效率较高。

转载地址:http://piuwz.baihongyu.com/

你可能感兴趣的文章
2020第十五届全国大学生智能汽车竞赛——4X4矩阵键盘+Flash调参系统
查看>>
合并两个有序数组
查看>>
Ubuntu 环境下使用中文输入法
查看>>
小白学习Vue(?)--model选项的使用(自定义组件文本框双向绑定)
查看>>
聊聊我的五一小假期
查看>>
面向对象之异常处理:多路捕获
查看>>
Python简易五子棋
查看>>
MySQL8.0.19 JDBC下载与使用
查看>>
Vue新建项目——页面初始化
查看>>
Cent OS 7.6 服务器软件安装(这篇博客主要是为了方便我配置云主机的)
查看>>
MySQL使用系列文章
查看>>
Node.js包使用系列(一)——修改NPM全局下载和缓存路径
查看>>
TDengine使用(一)——TDengine下载与安装
查看>>
ubuntu和windows之间无法复制粘贴
查看>>
力扣239. 滑动窗口最大值
查看>>
史上最全Vue的组件传值
查看>>
CSS position属性static/relative/absolute/fixed/sticky用法总结
查看>>
6.14编一个程序,将两个字符串s1和s2比较,不要用strcmp函数。
查看>>
如何解决vscode检测到#include错误,请更新includePath。
查看>>
1007 Maximum Subsequence Sum (25分) Python解法
查看>>