用 c++ 写一个迪杰斯特拉算法
时间: 2024-05-12 19:16:51 浏览: 154
好的,以下是用C语言编写的迪杰斯特拉算法示例代码:
```c
#define MAX 100 // 定义最大值
#define INF 0x3f3f3f3f // 定义正无穷
int n; // 图中的节点数量
int m; // 图中的边数目
int start; // 起点
int end; // 终点
int graph[MAX][MAX]; // 图的邻接矩阵
int dist[MAX]; // 存储最短路径长度
bool used[MAX]; // 记录每个节点是否已被遍历
// 执行迪杰斯特拉算法,计算出从起点到各个节点的最短路径
void dijkstra(int start) {
memset(used, 0, sizeof(used));
memset(dist, INF, sizeof(dist));
dist[start] = 0;
for (int i = 1; i <= n; i++) {
int v = -1;
for (int j = 1; j <= n; j++) {
if (!used[j] && (v == -1 || dist[j] < dist[v])) {
v = j;
}
}
if (v == -1) {
break;
}
used[v] = true;
for (int j = 1; j <= n; j++) {
dist[j] = min(dist[j], dist[v] + graph[v][j]);
}
}
}
int main() {
scanf("%d%d%d%d", &n, &m, &start, &end);
memset(graph, INF, sizeof(graph));
for (int i = 1; i <= m; i++) {
int u, v, w;
scanf("%d%d%d", &u, &v, &w);
graph[u][v] = w;
graph[v][u] = w;
}
dijkstra(start);
printf("%d\n", dist[end]);
return 0;
}
```
这是一个基本的迪杰斯特拉算法实现,适用于较小规模的图。在实际使用中,可能需要对其进行一些优化,如使用最小堆等数据结构来加速计算。
阅读全文