最小生成树(Prim算法)

来源:互联网 发布:淘宝差评对卖家重要吗 编辑:程序博客网 时间:2024/06/11 10:09

要求:输入一个图,求出最小生成树。

输出最小生成树的边。

Prim算法

代码:

#include <stdio.h>typedef struct graph{int vexnum,arcnum;int edge[100][100];}Graph;struct edge{int adjvex;int lowcost;}closedge[105];void Prim(Graph G,int start){int i,j,k;int min;for(i=1;i<=G.arcnum;i++){if(i!=start){closedge[i].adjvex=start;closedge[i].lowcost=G.edge[start][i];}}closedge[start].lowcost=0;for(i=2;i<=G.vexnum;i++){min=100000;for(j=1;j<=G.vexnum;j++){if(closedge[j].lowcost && closedge[j].lowcost<min){k=j;min=closedge[j].lowcost;}}printf("%d %d\n",closedge[k].adjvex,k);closedge[k].lowcost=0;for(j=1;j<=G.arcnum;j++){if(G.edge[k][j]<closedge[j].lowcost){closedge[j].lowcost=G.edge[k][j];closedge[j].adjvex=k;}}}}int main(){int i,j;Graph G;int n,m,a,b,c;printf("请输入结点个数和边的条数:\n");scanf("%d %d",&G.vexnum,&G.arcnum);printf("请输入边:\n");for(i=1;i<=G.arcnum;i++)for(j=1;j<=G.arcnum;j++)G.edge[i][j]=1000000;for(i=1;i<=G.arcnum;i++){scanf("%d %d %d",&a,&b,&c);G.edge[a][b]=c;G.edge[b][a]=c;}//输入一个无向图printf("最小生成树:\n");Prim(G,1);return 0;}


1 0
原创粉丝点击