迪杰特斯拉算法实现C++
时间: 2023-10-31 12:07:27 浏览: 180
迪杰斯特拉算法是一种用于解决单源最短路径问题的算法。它的基本思想是每次循环找到和起始点最近的一个可达结点,然后从这个结点出发进行下一步的扩展,直到所有结点都被加入到了已解决的集合中。以下是迪杰斯特拉算法的C语言实现:
```
#define N 100 // 图中节点的最大数量
#define INF 0x3f3f3f3f // 无穷大
typedef struct {
int u, v; // 有一条边从u指向v
int w; // 边的权重为w
} Edge;
int n; // 图中节点的数量
int m; // 图中边的数量
int s; // 起始点
int dist[N]; // 存储起始点到各个节点的最短距离
bool vis[N]; // 标记节点是否已加入到已解决的集合中
Edge edges[N]; // 存储图中的边
void Dijkstra() {
memset(vis, false, sizeof(vis));
memset(dist, INF, sizeof(dist)); // 初始化距离为无穷大
dist[s] = 0; // 起始点到自己的距离为0
for (int i = 1; i <= n; i++) {
int k = -1, Min = INF;
for (int j = 1; j <= n; j++) {
if (!vis[j] && dist[j] < Min) {
k = j;
Min = dist[j];
}
}
if (k == -1) break;
vis[k] = true;
for (int j = 1; j <= m; j++) {
int u = edges[j].u, v = edges[j].v, w = edges[j].w;
if (u == k && !vis[v] && dist[u] + w < dist[v]) {
dist[v] = dist[u] + w;
}
}
}
}
```
阅读全文