📄 p282.cpp
字号:
#include "p263.cpp"
template <class NameType,class DistType>
void Graph<NameType, DistType>::Prim ( MinSpanTree &T ) {
int NumVertices = VerticesList.Length(); //图中顶点数
if (NumVertices<=0) return;
int *lowcost,*nearvex;
lowcost = new int[NumVertices]; //创建辅助数组
nearvex = new int[NumVertices]; //创建辅助数组TV
for ( int i=1; i<NumVertices; i++ ) {
if (Edge[0][i]==0) lowcost[i]=MAXINT; else lowcost[i] = Edge[0][i];
nearvex[i] = 0; //顶点0到各边的代价及最短带权路径
}
nearvex[0] = -1; //顶点0加到生成树顶点集合, 用-1表示
for ( i=1; i<NumVertices; i++ ) { //循环-1次, 加入n-1条边
int min = MAXINT; int v = 0; //求生成树外顶点到生成树内顶点具有最小权值的边
for ( int j=0; j<NumVertices; j++ ) //确定当前具最小权值的边及顶点位置
if ( nearvex[j] != -1 && lowcost[j] < min ) { v = j; min = lowcost[j]; }
if ( v )
{ // v==0表示再也找不到要求的顶点了
T.addEdge(nearvex[v],v,lowcost[v]);
nearvex[v] = -1; //加入生成树顶点集合
for ( j=1; j<NumVertices; j++ )
if ( (nearvex[j] != -1) && (Edge[v][j]!=0) && (Edge[v][j] < lowcost[j]) )
{ lowcost[j] = Edge[v][j]; nearvex[j] = v; } //修改
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -