?? p282.cpp
字號:
#include "p263.cpp"template <class NameType,class DistType>void Graph<NameType, DistType>::Prim ( MinSpanTree &T ) { int NumVertices = VerticesList.Length(); //圖中頂點數(shù) if (NumVertices<=0) return; int *lowcost,*nearvex; lowcost = new int[NumVertices]; //創(chuàng)建輔助數(shù)組 nearvex = new int[NumVertices]; //創(chuàng)建輔助數(shù)組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到各邊的代價及最短帶權(quán)路徑 } nearvex[0] = -1; //頂點0加到生成樹頂點集合, 用-1表示 for ( i=1; i<NumVertices; i++ ) { //循環(huán)-1次, 加入n-1條邊 int min = MAXINT; int v = 0; //求生成樹外頂點到生成樹內(nèi)頂點具有最小權(quán)值的邊 for ( int j=0; j<NumVertices; j++ ) //確定當前具最小權(quán)值的邊及頂點位置 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; } //修改 } } }
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -