3、>
#include
#include
#define name 5//。。。。。。。。。。。。。。。。。。。。。。。。。。顶点名占5个字符
#define vertexnum 40 //。。。。。。。。。。。。。。。。。。。顶点数目最多为40
typedef char Vertex[name];//。。。。。。。。。。。。。。。顶点名字串
typedef int AdjMatrix[vertexnum][vertexnum];//邻接距阵
struct MGraph//。。。。。。。。。。。。。。。。。。。。。。。。。。定义图的结构体类型
4、
{
Vertex vexs[vertexnum];
AdjMatrix arcs;
int vexnum,arcnum;
};
typedef struct
{
Vertex adjvex;//。。。。。。。。。。。。。。。。。。。。。。。。当前点
int lowcost;//。。。。。。。。。。。。。。。。。。。。。。。。。。代价
}minside[vertexnum];
//声明函数原型
int LocateVex(MGraph G,Vertex u);
void CreateGraph(MGraph&G);
int minimum(minside S
5、Z,MGraph G);
void MiniSpanTree_PRIM(MGraph G,Vertex u);
//主函数
int main()
{
MGraph g;
CreateGraph(g);
MiniSpanTree_PRIM(g,g.vexs[0]);
system("PAUSE");
return 0;
}
int LocateVex(MGraph G,Vertex u)//。。。。。。。。。。。结点的定位
{
int i;
for(i=0;i6、 i;
return-1;
}
void CreateGraph(MGraph&G)//。。。。。。。。。。。。。。。。。。建立无向图
{
int i,j,k,w;
Vertex va,vb;
printf("请输入无向图G的顶点数和边数(以空格为分隔)\n");
scanf("%d%d",&G.vexnum,&G.arcnum);
printf("请输入%d个顶点的值(<%d个符):\n",G.vexnum,name);
for(i=0;i7、xs[i]);
for(i=0;i8、cs[j][i]=w;//。。。。。。。无向图边对称
}
}
int minimum(minside SZ,MGraph G)
{
int i=0,j,k,min;
while(!SZ[i].lowcost)i++;
min=SZ[i].lowcost;
k=i;
for(j=i+1;j0&&min>SZ[j].lowcost)
{
min=SZ[j].lowcost;
k=j;
}
return k;
}
void MiniSpanTree_PRIM(M
9、Graph G,Vertex u)
{
int i,j,k;
minside closedge;
k=LocateVex(G,u);
for(j=0;j