本文共 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/