c语言编程dijkstra算法
时间: 2023-12-12 09:35:23 浏览: 70
以下是使用C语言实现Dijkstra算法的代码,其中邻接矩阵存储了图中各个节点之间的距离,n为节点数:
```c
#include <stdio.h>
#include <stdlib.h>
#define INF 0Xfffffff
void dijkstra(int n, int e[][100], int start, int dis[], int visited[]) {
for (int i = 0; i < n; i++) {
dis[i] = e[start][i];
visited[i] = 0;
}
visited[start] = 1;
for (int i = 0; i < n - 1; i++) {
int min_dis = INF;
int min_index = -1;
for (int j = 0; j < n; j++) {
if (!visited[j] && dis[j] < min_dis) {
min_dis = dis[j];
min_index = j;
}
}
visited[min_index] = 1;
for (int k = 0; k < n; k++) {
if (dis[k] > dis[min_index] + e[min_index][k]) {
dis[k] = dis[min_index] + e[min_index][k];
}
}
}
}
int main() {
int n = 5; // 节点数
int e[100][100] = { // 邻接矩阵
{0, 10, INF, 30, 100},
{INF, 0, 50, INF, INF},
{INF, INF, 0, INF, 10},
{INF, INF, 20, 0, 60},
{INF, INF, INF, INF, 0}
};
int start = 0; // 起点
int dis[100]; // 记录从起点到其他点的最短距离
int visited[100]; // 标记每个节点的状态
dijkstra(n, e, start, dis, visited);
for (int i = 0; i < n; i++) {
printf("从%d到%d的最短距离为:%d\n", start, i, dis[i]);
}
return 0;
}
```
阅读全文