邻接矩阵求最短路径C语言
时间: 2023-08-16 19:03:49 浏览: 191
Floyd-algorithm-.zip_邻接矩阵
邻接矩阵求最短路径可以用 Dijkstra 算法来实现,以下是 C 语言代码实现:
```c
#include <stdio.h>
#include <limits.h> // 定义 INT_MAX
#define V 6 // 定义图的顶点数
#define INFINITY INT_MAX // 定义无穷大
void dijkstra(int graph[V][V], int src) {
int dist[V]; // 存储起点到每个顶点的最短距离
bool visited[V]; // 标记每个顶点是否已被访问
// 初始化 dist 和 visited 数组
for (int i = 0; i < V; i++) {
dist[i] = INFINITY;
visited[i] = false;
}
dist[src] = 0; // 起点到自己的距离为 0
// 计算最短路径
for (int count = 0; count < V - 1; count++) {
int u, min_dist = INFINITY;
// 找到距离起点最近的未访问顶点
for (int v = 0; v < V; v++) {
if (!visited[v] && dist[v] <= min_dist) {
u = v;
min_dist = dist[v];
}
}
visited[u] = true; // 标记该顶点已被访问
// 更新与该顶点相邻的顶点的最短距离
for (int v = 0; v < V; v++) {
if (!visited[v] && graph[u][v] && dist[u] != INFINITY && dist[u] + graph[u][v] < dist[v]) {
dist[v] = dist[u] + graph[u][v];
}
}
}
// 输出最短路径
printf("Vertex Distance from Source\n");
for (int i = 0; i < V; i++) {
printf("%d \t\t %d\n", i, dist[i]);
}
}
int main() {
int graph[V][V] = {{0, 2, 4, 0, 0, 0},
{2, 0, 1, 4, 2, 0},
{4, 1, 0, 0, 3, 0},
{0, 4, 0, 0, 3, 2},
{0, 2, 3, 3, 0, 2},
{0, 0, 0, 2, 2, 0}};
dijkstra(graph, 0);
return 0;
}
```
以上代码中,我们通过邻接矩阵表示图,并使用 Dijkstra 算法计算起点到每个顶点的最短距离。在这个例子中,我们假设图中有 6 个顶点,从 0 开始遍历。输出结果为:
```
Vertex Distance from Source
0 0
1 2
2 3
3 6
4 4
5 6
```
即起点到每个顶点的最短距离分别为 0、2、3、6、4 和 6。
阅读全文