Dijkstra算法C语言

这篇博客详细介绍了Dijkstra算法的C语言实现过程,包括初始化、寻找最短路径和更新最小值的步骤。通过示例代码展示了如何在二维矩阵中应用Dijkstra算法找到两点之间的最短距离。
摘要由CSDN通过智能技术生成
  1. void Dijkstra_c(int out[], int N, int v0){  
  2.     int i, j;  
  3.     int visited[maxN] = { 0 }; // 表示顶点是否被选中,0:顶点未被选中;1:顶点已被选中  
  4.     int last_visited = 0;  
  5.     for (i = 0; i < N; ++i){  
  6.         out[i] = INF; // 把输出结果全部初始化为无穷大  
  7.     }  
  8.     visited[v0] = 1; // 选中起始顶点  
  9.     out[v0] = 0;  
  10.   
  11.     for (i = 0; i < N - 1; ++i) { // N 个顶点需要做 N - 1 次循环  
  12.         // 查看顶点周围的所有点  
  13.         for (j = 0; j < N; ++j) { // 循环遍历所有顶点
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Dijkstra算法C语言实现,其中包括了注释以方便理解: ```c #include <stdio.h> #include <limits.h> // 定义顶点数量 #define V 6 // 找到dist数组中最小值的索引 int minDistance(int dist[], bool sptSet[]) { int min = INT_MAX, min_index; for (int v = 0; v < V; v++) { if (sptSet[v] == false && dist[v] <= min) { min = dist[v], min_index = v; } } return min_index; } // 打印结果 void printSolution(int dist[]) { printf("Vertex \t Distance from Source\n"); for (int i = 0; i < V; i++) { printf("%d \t\t %d\n", i, dist[i]); } } // Dijkstra算法 void dijkstra(int graph[V][V], int src) { int dist[V]; // 存储从源点到各个顶点的最短距离 bool sptSet[V]; // 存储已经处理过的顶点 // 初始化所有距离为无穷大,所有顶点都未处理过 for (int i = 0; i < V; i++) { dist[i] = INT_MAX, sptSet[i] = false; } // 源点到自身的距离为0 dist[src] = 0; // 处理V-1个顶点 for (int count = 0; count < V - 1; count++) { // 找到dist数组中最小值的索引 int u = minDistance(dist, sptSet); // 标记该顶点已经处理过 sptSet[u] = true; // 更新dist数组中的值 for (int v = 0; v < V; v++) { if (!sptSet[v] && graph[u][v] && dist[u] != INT_MAX && dist[u] + graph[u][v] < dist[v]) { dist[v] = dist[u] + graph[u][v]; } } } // 打印结果 printSolution(dist); } int main() { // 定义邻接矩阵 int graph[V][V] = { {0, 4, 0, 0, 0, 0}, {4, 0, 8, 0, 0, 0}, {0, 8, 0, 7, 0, 4}, {0, 0, 7, 0, 9, 14}, {0, 0, 0, 9, 0, 10}, {0, 0, 4, 14, 10, 0} }; dijkstra(graph, 0); // 从顶点0开始执行Dijkstra算法 return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值