最小生成树-prim算法模板
2013-08-05 15:11
423 查看
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define inf 10000000 #define maxn 21 int m,n; int edge[maxn][maxn],lowcost[maxn],nearvex[maxn]; void prim(int u0) { int i,j; int sumweight=0; for(i=1; i<=n; i++) { lowcost[i]=edge[u0][i]; nearvex[i]=u0; } nearvex[u0]=-1; for(i=1; i<n; i++) { int min=inf; int v=-1; for(j=1; j<=n; j++) { if(nearvex[j]!=-1 && lowcost[j]<min) { v=j; min=lowcost[j]; } } if(v!=-1) { cout<<nearvex[v]<<" "<<v<<" "<<lowcost[v]<<endl; 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; } } } } cout<<"weight of mst is "<<sumweight<<endl; } int main() { ios::sync_with_stdio(false); freopen("1.txt","r",stdin); int i,j,w,u,v; cin>>n>>m; memset(edge,0,sizeof(edge)); for(i=1; i<=m; i++) { cin>>u>>v>>w; edge[u][v]=edge[v][u]=w; } for(i=1; i<=n; i++) { for(j=1; j<=n; j++) { if(i==j) edge[i][j]=0; else if(edge[i][j]==0) edge[i][j]=inf; } } prim(1); return 0; } /* 7 9 1 2 28 1 6 10 2 3 16 2 7 14 3 4 12 4 5 22 4 7 18 5 6 25 5 7 24 */
相关文章推荐
- prim算法模板 (最小生成树)
- Prim算法模板(最小生成树)
- 图论——最小生成树Prim算法模板
- hdu1233最小生成树 prim算法模板
- [模板]最小生成树 prim算法
- prim算法模板—最小生成树
- 【最小生成树】(模板-prim算法)poj 1258
- 最小生成树kruskal与prim算法模板
- 求解最小生成树的算法 prim算法(附模板)
- 最小生成树Prim算法模板
- Hihocoder 之 #1097 : 最小生成树一·Prim算法 (用vector二维 模拟邻接表,进行prim()生成树算法, *【模板】)
- 【2144】图结构练习——最小生成树 (prim算法模板) (sdut)
- 【2144】图结构练习——最小生成树 (prim算法模板) (sdut)
- 最小生成树(prim算法模板)
- poj-2485-最小生成树prim算法模板
- POJ 2421 图的最小生成树 prim算法 模板代码的利用
- 最小生成树Prim算法模板
- 最小生成树-Prim算法(模板)
- 最小生成树Prim算法模板
- 最小生成树(prim算法)模板