dijkstra c++代码
时间: 2023-07-24 19:57:10 浏览: 105
以下是Dijkstra算法的C语言代码实现:
```c
#include <stdio.h>
#include <stdbool.h>
#define N 6 // 节点数
#define INF 0x3f3f3f3f // 无穷大
int graph[N][N] = { // 图的邻接矩阵表示
{0, 2, 10, 5, 3, INF},
{INF, 0, 12, INF, INF, 10},
{INF, INF, 0, INF, 7, INF},
{2, INF, INF, 0, 2, INF},
{4, INF, INF, 1, 0, INF},
{3, 4, INF, INF, 2, 0}
};
int Dijkstra(int start, int end)
{
int dist[N]; // 记录最短距离
bool visited[N] = {0}; // 标记是否访问过该点
for (int i = 0; i < N; i++) {
dist[i] = graph[start][i];
}
visited[start] = true;
for (int i = 0; i < N; i++) {
int minDist = INF, u = -1;
// 找出当前未访问过的最小距离的结点
for (int j = 0; j < N; j++) {
if (!visited[j] && dist[j] < minDist) {
minDist = dist[j];
u = j;
}
}
if (u == -1 || u == end) {
break;
}
visited[u] = true;
// 更新最短距离
for (int v = 0; v < N; v++) {
if (!visited[v] && graph[u][v] != INF && dist[u] + graph[u][v] < dist[v]) {
dist[v] = dist[u] + graph[u][v];
}
}
}
return dist[end];
}
int main()
{
int start = 0, end = 5;
int dist = Dijkstra(start, end);
printf("从%d到%d的最短距离为:%d\n", start, end, dist);
return 0;
}
```
该代码实现了Dijkstra算法,可以计算出给定起点和终点的最短距离。具体实现过程见注释。
阅读全文