用Dijkstra标号法求最短路径(c语言代码)
时间: 2023-08-30 14:07:06 浏览: 97
C++求所有顶点之间的最短路径(用Dijkstra算法)
以下是使用 Dijkstra 标号法求最短路径的 C 语言代码:
```
#define INF 0x3f3f3f3f // 无穷大
int dijkstra(int graph[V][V], int src, int dest) {
int dist[V]; // 存储最短距离
bool visited[V]; // 记录节点是否已访问
// 初始化 dist 数组
for (int i = 0; i < V; i++) {
dist[i] = INF;
visited[i] = false;
}
// 设置源节点的距离为 0
dist[src] = 0;
// 找到 V-1 个节点的最短路径
for (int i = 0; i < V-1; i++) {
int min_dist = INF;
int min_index;
// 选取距离 src 最近的未访问节点
for (int j = 0; j < V; j++) {
if (!visited[j] && dist[j] <= min_dist) {
min_dist = dist[j];
min_index = j;
}
}
// 标记节点已访问
visited[min_index] = true;
// 更新 min_index 的邻接节点的距离
for (int k = 0; k < V; k++) {
if (!visited[k] && graph[min_index][k] && dist[min_index] != INF && dist[min_index]+graph[min_index][k] < dist[k]) {
dist[k] = dist[min_index] + graph[min_index][k];
}
}
}
// 返回源节点到目标节点的最短距离
return dist[dest];
}
```
其中,V 为节点数,graph[V][V] 是邻接矩阵,存储节点之间的边权重。src 和 dest 分别表示源节点和目标节点。函数返回源节点到目标节点的最短距离。
阅读全文