void Dijkstra(MatGraph g,int v)
{
int dist[100], flag[100];
int i, j, k;
int min = 0;
for (i = 0; i <= g.n;i++) { //初始化
flag[i] = 0;
dist[i] = inf;
}
dist[1] = 0;
for (k = 1;k <= g.n;k++) {
min = k;
for (i = 1;i <= g.n;i++) {
if (flag[i] != 1) {
if (dist[i] <= dist[min]) {
min = i;
}
}
}
for (j = 1;j <= g.n;j++) {
if (flag[j] != 1) {
if (g.edges[min][j] != 0&&dist[j]>=g.edges[min][j] + dist[min]) {
dist[j] = g.edges[min][j]+dist[min];
}
}
}
flag[min] = 1;
}
for (i = 1;i <= g.n;i++) {
printf("%d ", dist[i]);
}
printf("\n");
}
关于我花了一下午终于学会Dijkstra算法这档事
海外
请登录之后再进行评论