Prime算法实现最小生成树
2014-05-06 10:51
218 查看
#include<string.h> #define INF 1000 #define MAXN 21 int n,m; int Edge[MAXN][MAXN]; int lowcost[MAXN]; int nearvex[MAXN]; void prime(int u0) { int i,j; int sumweight=0; int min=INF; int v=-1; for(i=1;i<=n;i++) { lowcost[i]=Edge[u0][i]; //到最小生成树的最近的点 nearvex[i]=u0; } nearvex[u0]=-1; for(i=1;i<n;i++) { min=INF; v=-1; //根据lowcost找出下一个开销最小的点 v for(j=1;j<=n;j++) { if(nearvex[j]!=-1 && lowcost[j]<min) { v=j; min=lowcost[j]; } } if(v!=-1) { printf("%4d%4d%4d\n",nearvex[v],v,lowcost[v]); nearvex[v]=-1; sumweight+=lowcost[v]; for(j=1;j<=n;j++) { if(nearvex[j]!=-1 &&Edge[v][j]<lowcost[j]) { lowcost[j]=Edge[v][j]; nearvex[j]=v; } } } } printf("weight of MST is: %d\n",sumweight); } int main() { int i,j; int u,v,w; scanf("%d%d",&n,&m); memset(Edge,0,sizeof(Edge)); for(i=1;i<=m;i++) { scanf("%d%d%d",&u,&v,&w); Edge[u][v]=Edge[v][u]=w; } for(i=0;i<=n;i++) { for(j=0;j<=n;j++) { if(i==j) Edge[i][j]=0; else if(Edge[i][j]==0) Edge[i][j]=INF; } } prime(1); system("PAUSE"); return 0; }
相关文章推荐
- 最小生成树与最短路径的区别以及实现方法
- 最小生成树-Prim算法实现
- PKU1611-2485-1861使用并查集实现Kruskar算法求最小生成树。
- 图的实现(带有深度/广度优先遍历/最小生成树算法)
- 最小生成树Prim算法实现
- 最小生成树Prim算法朴素版 C语言实现
- 寻找最小生成树的kruskal算法的java实现
- 最小生成树prim算法实现
- 最小生成树算法——Kruskal算法Java实现
- Kruskal最小生成树算法代码实现(c++)
- 图论--最小生成树Prim算法Java实现
- 图的最小生成树:Kruskal算法实现
- kruskal算法实现最小生成树(图模型+小根堆+并查集)
- 最小生成树 prime算法
- 最小生成树-普利姆算法eager实现
- Prim算法实现最小生成树MST(java)
- 图——Prim最小生成树算法(矩阵方式实现)
- 最小生成树普利姆算法c语言实现__Prim
- POJ3625—最小生成树+heap的实现
- 最小生成树prim算法实现