晚上好🌙🌙🌙
本答案参考ChatGPT-3.5
问题原因:
- 深度优先遍历和广度优先遍历的代码看起来没有问题,但最小生成树算法Prim()存在一个错误。在Prim算法中,
lowcost数组应该记录的是到目前为止找到的最短路径,而不是直接的边权重。在更新lowcost和closest数组时,需要将lowcost[j]设置为g->edges[k][j]而不是g->edges[v][i]。
解决方案:
- 修改Prim函数中的更新逻辑,将
lowcost[j]设置为g->edges[k][j],如下所示:
for (i = 1; i < g->n; i++) {
min = INF;
for (j = 0; j < g->n; j++)
if (lowcost[j] != 0 && lowcost[j] < min) {
min = lowcost[j];
k = j;
}
// 更新lowcost和closest
lowcost[k] = g->edges[k][j]; // 这里改为 g->edges[k][j]
closest[k] = k;
for (j = 0; j < g->n; j++)
if (lowcost[j] != 0 && g->edges[k][j] < lowcost[j]) {
lowcost[j] = g->edges[k][j];
closest[j] = k;
}
}
这样修改后,你应该能看到正确的深度优先遍历和广度优先遍历结果,以及最小生成树的正确路径。
