C语言实现dijkstra(adjacence matrix)
发布日期:2021-05-08 04:52:04 浏览次数:18 分类:精选文章

本文共 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数组记录已访问节点。通过迭代更新节点的最短距离,直到所有节点处理完毕。

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

上一篇:C#学习笔记(十)CSharp表达式与语句(二)ildasm打开反编译器+foreach本质
下一篇:C#学习笔记(九)CSharp表达式与语句(一)

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2025年04月24日 02时26分28秒