#define maxSize 50
#define INF 999
/*
-n:图的顶点个数
-MGraph:图的边信息,应为MGraph[n][n],可用宏定义指示
-v0:最短路径的起始顶点
-dist:存最短路径的长度
-path:存最短路径,path[i]=j;表示i最短路径上的前一个几点下标为j
*/
void Dijkstra(int n, int MGraph[][maxSize], int v0, int dist[], int path[]) {
int set[maxSize];//标记是否节点已被访问,一般maxSize为节点个数
int min, v;
for (int i = 0; i < n; ++i) {
dist[i] = MGraph[v0][i];
set[i] = 0;
if (MGraph[v0][i] < INF) {
path[i] = v0;
}
else {
path[i] = -1;
}
}
set[v0] = 1;
path[v0] = -1;
for (int i = 0; i < n-1; ++i) {
min = INF;
for (int j = 0; j < n; ++j) {
if (set[j] == 0 && dist[j] < min) {
v = j;
min = dist[j];
}
}
set[v] = 1;
for (int j = 0; j < n; ++j) {
if (set[j] == 0 && dist[v] + MGraph[v][j] < dist[j]) {
dist[j] = dist[v] + MGraph[v][j];
path[j] = v;
}
}
}
}
Dijstra迪斯特拉算法
最新推荐文章于 2023-06-06 16:52:39 发布