博客
关于我
C语言实现dijkstra(adjacence matrix)
阅读量:367 次
发布时间: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/

你可能感兴趣的文章
Jquery添加元素
查看>>
Jquery使用需要下载的文件
查看>>
BST中某一层的所有节点(宽度优先搜索)
查看>>
广度优先搜索
查看>>
猜字母
查看>>
Eclipse导出项目出现resource is out of sync with the file...错误
查看>>
Linux网络环境配置(设置ip地址)
查看>>
Idea使用Spring Initializr来快速创建springboot项目
查看>>
Dijkstra算法的总结
查看>>
ubuntu中安装scikit-learn
查看>>
SpringCloud和SprinBoot之间的关系
查看>>
javascript定义变量及数据类型介绍
查看>>
C语言的运算符和表达式
查看>>
椭圆曲线密码系统——椭圆曲线
查看>>
Vue实现选项卡功能
查看>>
数据结构——链表
查看>>
【Python】面向对象,封装
查看>>
接口又是个啥?
查看>>
uni-app请求头中携带token
查看>>
常用的 Git 命令和小技巧(1)
查看>>