hdu1233最小生成树 prim算法模板
2013-08-13 19:16
381 查看
思路:
1.从未选节点集合中选择到已选节点距离最近的点;
2.用该点更新未选节点到已选节点集合的距离;
3.不断循环2。
1.从未选节点集合中选择到已选节点距离最近的点;
2.用该点更新未选节点到已选节点集合的距离;
3.不断循环2。
#include<stdio.h> #include<string.h> #include<string> #include<algorithm> #include<iostream> #include<set> #include<map> #include<queue> #include<stack> #include<vector> #include<math.h> #include<stdlib.h> using namespace std; #define M 110 #define MAX 2e20 int dis[M][M],n; void prim() { int i,j,k,ans=0,tmp,lowcost[M*M]; lowcost[0]=0;//初始化将0节点纳入 for(i=1;i<n;i++)//初始化未选节点到已选节点(目前只有0)的距离 { lowcost[i]=dis[0][i]; } for(i=1;i<n;i++) { int mi=MAX; for(j=0;j<n;j++)//从未选节点中选择距离已选节点最近的点 { if(mi>lowcost[j]&&lowcost[j]!=0) { mi=lowcost[j]; tmp=j; } } ans+=mi; lowcost[tmp]=0; for(j=0;j<n;j++)//用该点更新为选节点到已选节点集合的距离 { if(lowcost[j]>dis[tmp][j]) { lowcost[j]=dis[tmp][j]; } } } printf("%d\n",ans); } int main() { int i,j,k,e,a,b; while(scanf("%d",&n),n) { e=n*(n-1)/2; for(i=0;i<e;i++) { scanf("%d%d%d",&a,&b,&k); a--;b--; dis[a][b]=dis[b][a]=k; } prim(); } return 0; }
相关文章推荐
- hdu1233 还是畅通工程 最小生成树 Prim算法堆优化
- hdu1233------------------第一道最小生成树prim算法
- hdu1233最小生成树 kruskal算法模板
- [模板]最小生成树 prim算法
- 最小生成树(prim算法模板)
- poj-2485-最小生成树prim算法模板
- 【2144】图结构练习——最小生成树 (prim算法模板) (sdut)
- 【2144】图结构练习——最小生成树 (prim算法模板) (sdut)
- 最小生成树-prim算法模板
- 最小生成树Prim算法模板
- 最小生成树(prim算法与kruskal算法)(模板)
- POJ 2421 图的最小生成树 prim算法 模板代码的利用
- 最小生成树之Prim算法(模板)
- 最小生成树Prim算法模板
- 最小生成树(hdu1233)Prim算法
- 图论——最小生成树Prim算法模板
- HDU1162-Eddy's picture-最小生成树(prim算法模板)
- 最小生成树Prim算法模板
- 最小生成树-Prim算法(模板)
- Hihocoder 之 #1097 : 最小生成树一·Prim算法 (用vector二维 模拟邻接表,进行prim()生成树算法, *【模板】)