首页 > 编程知识 正文

无向图的最小生成树,根据普里姆算法画最小生成树

时间:2023-05-05 20:55:07 阅读:174233 作者:3329

【实验目的】

)掌握图的最小生成树的概念

2 )熟悉使用预算法求解最小生成树的方法和操作。

【实验准备】

(1)阅读教材中有关图最小生成树的内容;

)2)熟悉普利姆算法。

【实验要求】

)1)用函数调用方式完成

2 )文件funp6-3.cpp的作用是用prime算法求最小生成树的操作;

)3)实验的提交需要完整准确的程序以及程序运行结果的截图。

【实验内容】

编写用prime算法求出从下图的顶点0开始的最小生成树的程序。

# include iostream # includecstdiousingnamespacestd; # define INF0x3F3 F3 fconstintmaxv=1000; sructmatgraph { int edges [ 100 ] [ 100 ]; int n; (; voidprim(matgraphg,int v ) { int lowcost[MAXV]; int MIN; int closest[MAXV],I,j,k; for(I=0; i g.n; I ) { lowcost[i]=g.edges[v][i]; closest[i]=v; (for ) I=1; i g.n; I ) { MIN=INF; for(j=0; j.n; j ) if(lowcost[j]!=0lowcost[j]min(min=lowcost[j] ); k=j; (} printf )边(%d,%d )的权限为%dn )、closest[k]、k、MIN ); lowcost[k]=0; for(j=0; j.n; j ) if(lowcost[j]!=0g.edges [ k ] [ j ] low cost [ j ] { low cost [ j ]=g.edges [ k ] [ j ]; closest[j]=k; } }}int main () { int i,j; MatGraph g; g.n=6; for(I=0; i=5; I ) for ) j=0; j=5; j ) if(I==j ) g.edges[i][j]=0; else g.edges[i][j]=INF; } g.edges[0][1]=g.edges[1][0]=9; g.edges[0][2]=g.edges[2][0]=10; g.edges[1][3]=g.edges[3][1]=5; g.edges[1][2]=g.edges[2][1]=7; g.edges[2][4]=g.edges[4][2]=6; g.edges[2][5]=g.edges[5][2]=7; g.edges[3][4]=g.edges[4][3]=1; g.edges[4][5]=g.edges[5][4]=8; printf (棱镜算法的最小生成树是(n ) ); prim(g,0 ); 返回0; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。