用C语言补完代码void Dijkstra(MGraph g,int v) { //求从v到其他顶点的最短路径 /********** Begin **********/ /********** End **********/ }
时间: 2023-12-22 20:04:52 浏览: 106
以下是用C语言补完代码的示例:
```c
void Dijkstra(MGraph g, int v)
{
//求从v到其他顶点的最短路径
int visited[MAXSIZE]; // 记录顶点是否被访问过
int dist[MAXSIZE]; // 记录从v到各个顶点的最短距离
int path[MAXSIZE]; // 记录最短路径的前驱顶点
// 初始化visited、dist和path数组
for (int i = 0; i < g.numVertexes; i++)
{
visited[i] = 0; // 未访问过
dist[i] = g.arc[v][i]; // 初始化最短距离为v到各个顶点的直接距离
if (dist[i] < INFINITY)
path[i] = v; // 如果v和i之间有直接路径,则将v作为i的前驱顶点
else
path[i] = -1; // 如果v和i之间没有直接路径,则将-1作为i的前驱顶点
}
visited[v] = 1; // 将v标记为已访问过
// 开始迭代
for (int i = 1; i < g.numVertexes; i++)
{
int min = INFINITY; // 记录当前最小距离
int u = v; // 记录当前最小距离对应的顶点
// 找到当前未访问过的顶点中距离v最近的顶点u
for (int j = 0; j < g.numVertexes; j++)
{
if (!visited[j] && dist[j] < min)
{
min = dist[j];
u = j;
}
}
visited[u] = 1; // 将u标记为已访问过
// 更新从v到其他顶点的最短距离和前驱顶点
for (int j = 0; j < g.numVertexes; j++)
{
if (!visited[j] && g.arc[u][j] < INFINITY && dist[u] + g.arc[u][j] < dist[j])
{
dist[j] = dist[u] + g.arc[u][j];
path[j] = u;
}
}
}
// 输出最短路径和距离
for (int i = 0; i < g.numVertexes; i++)
{
if (i != v)
{
printf("从顶点%d到顶点%d的最短路径为:", v, i);
printf("%d", i);
int p = path[i];
while (p != v)
{
printf(" <- %d", p);
p = path[p];
}
printf(" <- %d", v);
printf(",距离为:%d\n", dist[i]);
}
}
}
```
阅读全文