写一个C语言程序使用dijkstra求最短路径
时间: 2024-05-14 20:18:13 浏览: 101
以下是使用Dijkstra算法求解单源最短路径的C语言程序:
```c
#define INF 0x3f3f3f3f // 定义INF为无穷大值
int dijkstra(int n, int s, int t, int *dist, int **graph) {
int i, j, u, v, min;
int *visited = (int *)malloc(n * sizeof(int)); // 标记节点是否已被访问
for (i = 0; i < n; i++) {
dist[i] = graph[s][i];
visited[i] = 0;
}
visited[s] = 1;
for (i = 1; i < n; i++) {
min = INF;
for (j = 0; j < n; j++) { // 选择最短路径的节点
if (!visited[j] && dist[j] < min) {
min = dist[j];
u = j;
}
}
visited[u] = 1;
for (v = 0; v < n; v++) { // 更新最短路径
if (!visited[v] && (dist[u] + graph[u][v]) < dist[v]) {
dist[v] = dist[u] + graph[u][v];
}
}
}
int result = dist[t];
free(visited);
return result;
}
```
其中,n表示节点数量,s表示起点,t表示终点,dist表示从起点到各节点的最短路径长度,graph表示节点之间的距离。
这个程序的时间复杂度为O(n^2),在处理大规模的图时可能会比较慢,可以使用优先队列等数据结构来优化。
阅读全文