最小生成树 prim算法

---恢复内容开始---

最小生成树:n个顶点加上n-1条边生成一棵耗费最小代价的树

两种算法:prim和kruskal

第一种:prim算法(从相应顶点出发,每次找出权值最小的边,进行顶点连接,不能出现环路)

两个数组:lowcost[i]:以i为终点的边的权值    mst[i] 起始点

下一篇为kruskal

void MST(char vertex)
{
int n = NumVertex;
int *lowcost = new int[n]; //
int *mst = new int[n];
int i,j;
int k = GetVertexPos(vertex);
for(i = 0;i<n;i++) //对从k开始的lowcost和mst赋初值
{
if(i != k)
{
lowcost[i] = GetWeight(k,i);//从k到i的权值
mst[i] = k;
}
else
{
lowcost[i] = 0;
}
}
int min,min_index;
int begin,end;

for(i = 0;i<n-1;i++) //n个顶点,寻找n-1条边
{
min = MAX_COST;
min_index = -1;
for(j = 0;j < n;j++) //寻找最小的权值
{
if(lowcost[j] != 0 && lowcost[j] < min)
{
min = lowcost[j];
min_index = j; //记住最小权值的下标
}
}
begin = mst[min_index]; //从当前mst[min_index]所表示的顶点开始
end = min_index; //min_index为结束位置
cout<<Vertex[begin]<<"->"<<Vertex[end]<<":"<<min<<endl;
lowcost[min_index] = 0; //
int cost;
//更新lowcost数组以及mst数组
for(j = 0;j<n;j++)
{
cost = GetWeight(min_index,j);
if(cost < lowcost[j])
{
lowcost[j] = cost;
mst[j] = min_index;
}
}
}
}

 

 

 

---恢复内容结束---

最小生成树:n个顶点加上n-1条边生成一棵耗费最小代价的树

两种算法:prim和kruskal

第一种:prim算法(从相应顶点出发,每次找出权值最小的边,进行顶点连接,不能出现环路)

两个数组:lowcost[i]:以i为终点的边的权值    mst[i] 起始点

下一篇为kruskal

void MST(char vertex)
{
int n = NumVertex;
int *lowcost = new int[n]; //
int *mst = new int[n];
int i,j;
int k = GetVertexPos(vertex);
for(i = 0;i<n;i++) //对从k开始的lowcost和mst赋初值
{
if(i != k)
{
lowcost[i] = GetWeight(k,i);//从k到i的权值
mst[i] = k;
}
else
{
lowcost[i] = 0;
}
}
int min,min_index;
int begin,end;

for(i = 0;i<n-1;i++) //n个顶点,寻找n-1条边
{
min = MAX_COST;
min_index = -1;
for(j = 0;j < n;j++) //寻找最小的权值
{
if(lowcost[j] != 0 && lowcost[j] < min)
{
min = lowcost[j];
min_index = j; //记住最小权值的下标
}
}
begin = mst[min_index]; //从当前mst[min_index]所表示的顶点开始
end = min_index; //min_index为结束位置
cout<<Vertex[begin]<<"->"<<Vertex[end]<<":"<<min<<endl;
lowcost[min_index] = 0; //
int cost;
//更新lowcost数组以及mst数组
for(j = 0;j<n;j++)
{
cost = GetWeight(min_index,j);
if(cost < lowcost[j])
{
lowcost[j] = cost;
mst[j] = min_index;
}
}
}
}

 

posted on 2018-06-07 16:58  dc21  阅读(121)  评论(0)    收藏  举报

导航