2026-1-13
void Prim(AMGraph G, char u) {
int k = LocateVex(G, u); // 定位起始顶点u的位置
for (int i = 0; i < G.vexnum; i++) {
if (i != k) {
closedge[i] = {u, G.arcs[k][i]}; // 初始化closedge数组
}
}
closedge[k].lowcost = 0; // 起始顶点加入生成树
for (int i = 1; i < G.vexnum; i++) { // 循环n-1次
int k0 = Min(G); // 找到当前最小权值的边
char u0 = closedge[k0].adjvex; // 边的起点
cout << u0 << "->" << G.vexs[k0] << endl; // 输出当前选择的边
closedge[k0].lowcost = 0; // 将顶点k0加入生成树
for (int j = 0; j < G.vexnum; j++) {
if (closedge[j].lowcost > 0 && G.arcs[k0][j] < closedge[j].lowcost) {
closedge[j] = {G.vexs[k0], G.arcs[k0][j]}; // 更新closedge信息
}
}
}
}
浙公网安备 33010602011771号