使用C语言实现Dijkstra算法来计算图中节点间最短路径的代码
时间: 2024-12-23 17:12:43 浏览: 18
在C语言中,我们可以使用邻接矩阵或者邻接表来表示图,并通过Dijkstra算法找出两个节点之间的最短路径。这里提供一个基本的邻接矩阵版本的Dijkstra算法实现:
```c
#include <stdio.h>
#include <limits.h>
#define V 9 // 图的节点数
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 dijkstra(int graph[V][V], int src) {
int dist[V]; // 存储从源到各个顶点的距离
bool sptSet[V]; // 标记已找到最短路径的节点
// 初始化所有节点距离为无穷大,src点距离为0
for (int i = 0; i < V; i++) {
dist[i] = graph[src][i] ? graph[src][i] : INT_MAX;
sptSet[i] = false;
}
dist[src] = 0;
// 更新最短路径并标记已经访问过的节点
for (int count = 0; count < V - 1; count++) {
int u = minDistance(dist, sptSet);
sptSet[u] = true;
// 更新未访问节点的最短距离
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];
}
}
printf("Vertex \t\t Distance from Source\n");
for (int i = 0; i < V; i++)
printf("%d \t\t %d\n", i, dist[i]);
}
int main() {
int graph[V][V] = { /* 邻接矩阵的值 */ };
int source; // 源节点
printf("Enter the source vertex: ");
scanf("%d", &source);
dijkstra(graph, source);
return 0;
}
```
注意,这个例子假设你已经有了一个邻接矩阵来表示图,你需要输入正确的节点连接和权重。运行这个程序,它会输出每个节点到源节点的最短路径。
阅读全文