poj 1251~最小生成树~入门
2012-08-10 14:35
357 查看
今天上午把最小生成树思想看了一下,感觉思想很简单,但用代码实现的时候才发现还是有点小麻烦的,然后去百度百科上把代码copy过来看了一下,百科的写得很明朗,但太长了,看得我有点郁闷。看了思想总该练习一下,百度了最小生成树的入门题,看了poj1251Jungle Roads,是一个裸最小生成树,敲了代码后发现字符输入有点小错误,加了个getchar(),输入过了,但交上去之后居然超时,算了一下没道理超时啊,应该是输入问题,将输入改成字符串,再交上去,果断AC啊。
ACcode:
ACcode:
#include<stdio.h> #include<iostream> #define min(a,b) a<b?a:b using namespace std; const int MAX=0x3ffffff; const int size=30; struct Gragh { int vernum; int edge[size][size]; }G; int minv[size]; bool tu[size]; int minedge() { int i,mins=MAX,m; for (i=1;i<=G.vernum;i++) { if (tu[i]&&minv[i]<mins) { mins=minv[i]; m=i; } } return m; } int MST() { int i,j,k,s,sum=0; for (i=1;i<=G.vernum;i++) tu[i]=true; for (i=2;i<=G.vernum;i++) minv[i]=G.edge[1][i]; s=1,tu[1]=false; for (i=2;i<=G.vernum;i++) { k=minedge(); sum+=minv[k]; tu[k]=false; for (j=1;j<=G.vernum;j++) { if (tu[j]) minv[j]=min(minv[j],G.edge[k][j]); } } return sum; } int main() { int i,j,k,v,a,b; char p[10],q[10]; while (scanf("%d",&G.vernum)&&G.vernum) { for (i=1;i<=G.vernum;i++) for (j=1;j<=G.vernum;j++) G.edge[i][j]=MAX; for (i=1;i<G.vernum;i++) { getchar(); scanf("%s%d",p,&k); a=p[0]-'A'+1; for (j=1;j<=k;j++) { scanf("%s%d",q,&v); b=q[0]-'A'+1; G.edge[a][b]=G.edge[b][a]=v; } } printf("%d\n",MST()); } return 0; }
相关文章推荐
- POJ 1251 最小生成树入门
- poj 最小生成树入门水题 1251 && 1258 && 1287 && 2395 && 2485 && 2377
- poj 最小生成树入门水题 1251 && 1258 && 1287 && 2395 && 2485 && 2377
- POJ1251 Jungle Roads 【最小生成树Prim】
- POJ1251 JungleRoads 最小生成树
- poj 1251 Jungle Roads 最小生成树
- poj 1251 Jungle Roads ---最小生成树
- POJ 1251 Exponentiation(kruskal 最小生成树)
- POJ 1251 最小生成树prim算法
- poj2421 Constructing Roads ——最小生成树入门题_Kruscal算法
- [最小生成树] poj 1251 Jungle Roads
- POJ 1251 Jungle Roads(最小生成树)
- POJ 1251 最小生成树
- POJ - 1251 Jungle Roads (最小生成树Kruskal、并查集)
- POJ 1251 Jungle Roads(最小生成树)
- POJ 1251 最小生成树prim算法
- poj----(1251)Jungle Roads(最小生成树)
- [入门]最小生成树--poj1258 Agi-Net
- poj 1251 Jungle Roads 最小生成树
- POJ 1251 Jungle Roads 最小生成树