c语言实现单源顶点最短路径问题
时间: 2023-08-13 18:03:09 浏览: 105
单源顶点最短路径问题可以使用Dijkstra算法来解决,下面是C语言实现代码:
```c
#include <stdio.h>
#include <limits.h>
#define V 6 // 顶点数
#define INF INT_MAX // 定义正无穷
int graph[V][V] = { // 邻接矩阵表示图
{0, 5, INF, 10, INF, INF},
{INF, 0, 3, INF, INF, INF},
{INF, INF, 0, 1, INF, INF},
{INF, INF, INF, 0, 2, INF},
{INF, INF, INF, INF, 0, 6},
{INF, INF, INF, INF, INF, 0}
};
void dijkstra(int src) {
int dist[V]; // 存储源顶点到各个顶点的最短距离
int visited[V] = {0}; // 标记顶点是否已经确定最短路径
for(int i = 0; i < V; i++) {
dist[i] = INF; // 初始化源顶点到各个顶点的距离为正无穷
}
dist[src] = 0; // 源顶点到自己的距离为0
for(int i = 0; i < V-1; i++) {
int u, min_dist = INF;
for(int j = 0; j < V; j++) {
if(!visited[j] && dist[j] < min_dist) { // 找到未确定最短路径的距离最小的顶点
u = j;
min_dist = dist[j];
}
}
visited[u] = 1; // 标记该顶点已确定最短路径
for(int v = 0; v < V; v++) {
if(!visited[v] && graph[u][v] && dist[u] != INF && dist[u]+graph[u][v] < dist[v]) {
dist[v] = dist[u] + graph[u][v]; // 更新源顶点到v的最短距离
}
}
}
printf("顶点\t最短距离\n");
for(int i = 0; i < V; i++) {
printf("%d\t%d\n", i, dist[i]);
}
}
int main() {
dijkstra(0);
return 0;
}
```
在这个例子中,我们使用邻接矩阵表示图,然后通过Dijkstra算法求出源顶点0到其他顶点的最短距离。
阅读全文