用Prim算法构造最小生成树

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用Prim算法构造最小生成树

班级:2010级计算机1班学号:2010131116 姓名:杨才一、实验目的

了解最小生成树的概念,掌握生成最小生成树的方法。

二、实验内容

建立一个含任意结点的无向连通网,并用Prim算法构造其最小生成树

三、实验要点及说明

如果无向连通图是一个网,则其所有生成树中必有一棵树的边的权值总和最小,这棵生成树为最小生成树。

Prim算法:在图G=(V,E)(V为顶点集,E为边集)中任选一顶点v0,令集合U={v0}为初态,在一个顶点在U中,另一顶点在V-U 中的所有边中找权值最小的边(u,v)(U∈ u,v∈ V-U),并将v加入到U中,同时将边(u,v)加入集合T中(T的初态为空集),这样不断地扩大U,直至U=V,则集合T中的边为所求最小生成树的边

四、算法思想与算法描述

1、邻接矩阵的数据类型的定义如下:

typedef struct

{ int no; /*顶点编号*/

string name; /*顶点其他信息*/

} VertexType; /*顶点类型*/

typedef struct/*图的定义*/

{ int edges[MAXV][MAXV]; /*邻接矩阵*/

int vexnum,arcnum; /*顶点数,弧数*/

VertexType vexs[MAXV]; /*存放顶点信息*/

}MGraph;

2、临时数组的存放的数据类型

struct {

int closest; // U集中的顶点序号

int lowcost; // 边的权值

} closedge[MAXV];

int const INF=32767; /*INF表示∞*/

3、prime算法实现:(原理见实验说明)

void prime(MGraph g,int v)

{

int lowcost[MAXV];

int min;

int closest[MAXV];

int i,j,k;

for(i=0;i

{

lowcost[i]=g.edges[v][i];

closest[i]=v;

}

for(i=1;i

{

min=INF;

for(j=0;j

if(lowcost[j]!=0&&lowcost[j]

{

min=lowcost[j];

k=j;

}

printf("边(%d,%d)权为:%d\n",closest[k],k,min);

lowcost[k]=0;

for(j=0;j

if(g.edges[k][j]!=0&&g.edges[k][j]

{

lowcost[j]=g.edges[k][j];

closest[j]=k;

}

}

}

4、邻接矩阵的创建

void CreatMGraph(MGraph &M)

{

int n,e;

cout<<"输入定点数:";

cin>>n;

M.vexnum=n;

cout<<"输入弧数:";

cin>>e;

M.arcnum=e;

for(int i=0;i

{

for(int j=0;j

{

if(i==j)

M.edges[i][j]=0;

else

M.edges[i][j]=INF;

}

}

cout<<"输入边的权:(如1 2 3 表示点到点的权时)"<

for(int i=0;i<2*e;i++)

{

int x,y,z;

cin>>x>>y>>z;

M.edges[x][y]=z;

}

cout<<"输入点编号,名字:"<

for(int i=0;i

{

int No;

string str;

cin>>No>>str;

M.vexs[i].name=str;

M.vexs[i].no=No;

}

}

int const MAXV=16

4、主函数

int main(void)

{

MGraph m;

CreatMGraph(m);

cout<<"输出无向图的二维矩阵:"<

for(int i=0;i

{

for(int j=0;j

{

if(m.edges[i][j]==INF)

cout<<" ";

else

cout<

}

cout<

}

cout<<"输入最小生成树:"<

prime(m,0);

return 0;

}

五、实验测试及结果

1.输入图的定点数和边数

相关文档
最新文档