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信息
        }
    }
}

}

posted on 2026-01-13 02:40  不耻  阅读(4)  评论(0)    收藏  举报

导航