int cost[MAX_V][MAX_V];
int d[MAX_V];
bool used[MAX_V];
int N, M, C, A, B;
void init() {
for(int i = 0; i <= N; i++) {
for(int j = 0; j <= i; j++) {
if(i == j) {
cost[i][j] = 0;
}
else {
cost[i][j] = cost[j][i] = INF;
}
}
used[i] = false;
d[i] = INF;
}
}
void dijkstra(int s) {
for(int i = 1; i <= N; i++) {
d[i] = cost[s][i];
}
used[s] = true;
for(int i = 2; i <= N; i++) {
int mind = INF;
int u;
for(int j = 1; j <= N; j++) {
if(!used[j]) {
if(d[j] < mind) {
mind = d[j];
u = j;
}
}
}
if(mind == INF) break;
used[u] = true;
for(int j = 1; j <= N; j++) {
if(!used[j]) {
if(d[j] > d[u] + cost[u][j]) {
d[j] = d[u] + cost[u][j];
}
}
}
}
}dijkstra邻接矩阵形式
最新推荐文章于 2024-06-13 15:33:28 发布
本文介绍了一个基于Dijkstra算法的实现示例,该算法用于解决带权图中的最短路径问题。通过初始化图的成本矩阵和距离数组,使用布尔数组标记已访问顶点,并迭代更新各顶点之间的最短路径。
486

被折叠的 条评论
为什么被折叠?



