迪杰斯特拉算法c语言领接矩阵采用从键盘输入
时间: 2023-07-26 17:14:44 浏览: 102
以下是采用从键盘输入邻接矩阵的迪杰斯特拉算法的C语言实现:
```c
#include<stdio.h>
#include<limits.h>
// 定义图的最大节点数
#define NODE_NUM 100
// 定义邻接矩阵表示的图
int graph[NODE_NUM][NODE_NUM];
// 执行迪杰斯特拉算法
void dijkstra(int start, int node_num) {
// 初始化距离和标记数组
int dist[node_num];
int visited[node_num];
for(int i = 0; i < node_num; i++) {
dist[i] = INT_MAX;
visited[i] = 0;
}
dist[start] = 0;
// 循环遍历所有节点
for(int i = 0; i < node_num; i++) {
// 找到距离起点最近的节点
int min_dist = INT_MAX, min_index = -1;
for(int j = 0; j < node_num; j++) {
if(!visited[j] && dist[j] < min_dist) {
min_dist = dist[j];
min_index = j;
}
}
// 标记该节点已访问
visited[min_index] = 1;
// 更新该节点的邻居节点的距离
for(int j = 0; j < node_num; j++) {
if(graph[min_index][j] && dist[min_index] != INT_MAX && dist[min_index] + graph[min_index][j] < dist[j]) {
dist[j] = dist[min_index] + graph[min_index][j];
}
}
}
// 输出最短路径
printf("从节点%d出发到各节点的最短路径长度为:\n", start);
for(int i = 0; i < node_num; i++) {
printf("到节点%d的最短路径长度为:%d\n", i, dist[i]);
}
}
int main() {
int node_num;
printf("请输入图的节点数:");
scanf("%d", &node_num);
printf("请依次输入邻接矩阵:\n");
for(int i = 0; i < node_num; i++) {
for(int j = 0; j < node_num; j++) {
scanf("%d", &graph[i][j]);
}
}
// 从节点0出发执行迪杰斯特拉算法
dijkstra(0, node_num);
return 0;
}
```
以上实现中,先从键盘输入图的节点数和邻接矩阵,然后执行迪杰斯特拉算法。在遍历所有节点的过程中,每次找到距离起点最近的节点,标记该节点已访问,并更新该节点的所有邻居节点的距离。最后输出起点到各个节点的最短距离。
阅读全文