prim算法(基于贪心的算法)
#define n 10 //图中顶点的个数
#define INF 100000000 //无穷大
void prim(float MGraph[][n],int v0,int &sum) {
int v, k, min; //v执行需要插入的结点,k执行最小边的另外一个顶点,min为无穷大,用于选择最小的边
int lowcost[n]; //最短路径集
int vset[n]; //顶点集
//初始化最短路径集和顶点集
for (int i = 0; i < n; i++)
{
lowcost[i] = MGraph[v0][i];
vset[i] = 0;
}
//将v0并入vset集
v = v0;
vset[v] = 1;
sum = 0; //权和初始化
for (int i = 0; i < n-1; i++) //对其余n-1个顶点进行操作
{
min = INF;
//找寻最小代价边
for (int j = 0; j < n; j++)
{
if (lowcost[j]<min)
{
min = lowcost[j];
k = j;
}
}
vset[k] = 1; //将k并入顶点集
v = k;
sum += min;
//更新最小代价集
for (int i = 0; i < n; i++)
{
if (vset[i]==0&&MGraph[v][i]<lowcost[i])
{
lowcost[i] = MGraph[v][i];
}
}
}
}
图结构浅谈之prim算法
最新推荐文章于 2022-11-14 16:11:39 发布