最小生成树Prim算法C++
时间: 2023-11-30 19:40:23 浏览: 146
c++ 最小生成树Prim
5星 · 资源好评率100%
Prim算法是一种用于求解加权无向连通图的最小生成树的算法。它的基本思想是从一个任意结点开始,每次选择一个与当前生成树相邻的权值最小的结点加入生成树中,直到所有结点都被加入为止。下面是Prim算法的C++代码实现,其中邻接表存储图结构:
```
void Prim(GraphList G,int v) {
int flag = 0; //定位当前选择的结点的在定点表中的下标位置
int sum = 0; //最小生成树的权值之和
int min = 9999; //游标,最小权值,后面对比边权值用
int j = 1;
visited[v] = 1; //初始节点标记已访问
Node[0] = v; //将初始结点放入以访问结点数组中
EdgeNode* p = new EdgeNode;
while (j < G.vexnum) {
int i = 0;
min = 9999;
while (Node[i] != -1) {
for (p = G.Vexlist[Node[i]].first; p; p = p->next) {
if (min > p->weight && visited[p->adjvex] == 0) //在所有已经访问的结点中,找出与为访问结点相邻的边的权值最小的那条边和相邻的结点
{
min = p->weight;
flag = p->adjvex;
}
}
i++;
}
sum += min;
Node[j] = flag;
visited[flag] = 1;
j++;
}
cout << "最小生成树权值之和: " << sum << endl;
}
```
阅读全文