void Prim(Graph g,int v,*sum)
{
//初始化三幻神
int low_cost[max_size];
int vist[G.numver]={0};//辅助数组代表已加入集合
int parent[G.numver];
if(int i =0;i<G.numver;i++)
{
low_cost[i] = G.edge[v][i];
//初始化low_cost[],代表输入的起点与其他点当前的距离
}
for(int i=0 ;i<G.numver;i++)
{
int pos = 1e5;//最小权值索引
for(int j = 0;j<G.numver;j++)//找下一个要接入的点(与已形成集合的距离最小)的索引
{
if(visit[j]==0&&low_cost[j]<low_cost[pos])
{
pos = j;
}
}
visit[j] = 1;//加入集合
for(int j=0;j<G.numver;j++)
//若刚加入的点pos,使得新集合与其他点的距离缩小,更新low_cost[],parent[]
{
if(visit[j]==0&&G.Edge[j][pos]<low_cost[j];)//如果是无向图,行列可以互换
{
low_cost[j] = G.Edge[j][pos];
parent[j] = pos;//连接两点
}
}
最小生成树--Prim算法(邻接矩阵)
于 2024-09-29 19:41:49 首次发布