?? algo7-2.cpp
字號(hào):
// algo7-2.cpp 實(shí)現(xiàn)算法7.9的程序
#include"c1.h"
typedef int VRType;
typedef char InfoType;
#define MAX_NAME 3 // 頂點(diǎn)字符串的最大長(zhǎng)度+1
#define MAX_INFO 20 // 相關(guān)信息字符串的最大長(zhǎng)度+1
typedef char VertexType[MAX_NAME];
#include"c7-1.h"
#include"bo7-1.cpp"
typedef struct
{ // 記錄從頂點(diǎn)集U到V-U的代價(jià)最小的邊的輔助數(shù)組定義
VertexType adjvex;
VRType lowcost;
}minside[MAX_VERTEX_NUM];
int minimum(minside SZ,MGraph G)
{ // 求closedge.lowcost的最小正值
int i=0,j,k,min;
while(!SZ[i].lowcost)
i++;
min=SZ[i].lowcost; // 第一個(gè)不為0的值
k=i;
for(j=i+1;j<G.vexnum;j++)
if(SZ[j].lowcost>0)
if(min>SZ[j].lowcost)
{
min=SZ[j].lowcost;
k=j;
}
return k;
}
void MiniSpanTree_PRIM(MGraph G,VertexType u)
{ // 用普里姆算法從第u個(gè)頂點(diǎn)出發(fā)構(gòu)造網(wǎng)G的最小生成樹(shù)T,輸出T的各條邊。算法7.9
int i,j,k;
minside closedge;
k=LocateVex(G,u);
for(j=0;j<G.vexnum;++j) // 輔助數(shù)組初始化
{
if(j!=k)
{
strcpy(closedge[j].adjvex,u);
closedge[j].lowcost=G.arcs[k][j].adj;
}
}
closedge[k].lowcost=0; // 初始,U={u}
printf("最小代價(jià)生成樹(shù)的各條邊為:\n");
for(i=1;i<G.vexnum;++i)
{ // 選擇其余G.vexnum-1個(gè)頂點(diǎn)
k=minimum(closedge,G); // 求出T的下一個(gè)結(jié)點(diǎn):第K頂點(diǎn)
printf("(%s-%s)\n",closedge[k].adjvex,G.vexs[k]); // 輸出生成樹(shù)的邊
closedge[k].lowcost=0; // 第K頂點(diǎn)并入U(xiǎn)集
for(j=0;j<G.vexnum;++j)
if(G.arcs[k][j].adj<closedge[j].lowcost)
{ // 新頂點(diǎn)并入U(xiǎn)集后重新選擇最小邊
strcpy(closedge[j].adjvex,G.vexs[k]);
closedge[j].lowcost=G.arcs[k][j].adj;
}
}
}
void main()
{
MGraph G;
CreateAN(G);
MiniSpanTree_PRIM(G,G.vexs[0]);
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -