c语言写一个,最短路径.
时间: 2024-02-06 22:03:40 浏览: 68
C语言练习题-最短路径.c
可以使用Dijkstra算法来求解最短路径问题,具体实现过程可以参考以下代码:
```c
#include <stdio.h>
#define INF 0x3f3f3f3f // 定义正无穷
void dijkstra(int n, int start, int dis[], int vis[], int map[][100]) {
for (int i = 0; i < n; i++) {
dis[i] = map[start][i]; // 初始化距离数组
vis[i] = 0; // 初始化访问标记数组
}
dis[start] = 0;
vis[start] = 1;
for (int i = 0; i < n - 1; i++) {
int min = INF, min_index = 0;
for (int j = 0; j < n; j++) {
if (!vis[j] && dis[j] < min) {
min = dis[j];
min_index = j;
}
}
vis[min_index] = 1;
for (int k = 0; k < n; k++) {
if (!vis[k] && dis[min_index] + map[min_index][k] < dis[k]) {
dis[k] = dis[min_index] + map[min_index][k];
}
}
}
}
int main() {
int n, m, a, b, w;
scanf("%d %d", &n, &m);
int map[100][100], dis[100], vis[100];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (i == j) {
map[i][j] = 0;
} else {
map[i][j] = INF;
}
}
}
for (int i = 0; i < m; i++) {
scanf("%d %d %d", &a, &b, &w);
map[a][b] = w;
map[b][a] = w;
}
dijkstra(n, 0, dis, vis, map);
printf("%d\n", dis[n - 1]);
return 0;
}
```
其中,map存储图的邻接矩阵,dis初始化为INF,表示不可达,vis初始化为0,表示未访问。在dijkstra函数中,首先根据起点进行初始化,然后每次选取未访问的距离最小的点进行扩展,更新距离数组dis。最后dis[n - 1]即为起点到终点的最短路径。
阅读全文