您的位置:首页 > 其它

poj 1251~最小生成树~入门

2012-08-10 14:35 357 查看
今天上午把最小生成树思想看了一下,感觉思想很简单,但用代码实现的时候才发现还是有点小麻烦的,然后去百度百科上把代码copy过来看了一下,百科的写得很明朗,但太长了,看得我有点郁闷。看了思想总该练习一下,百度了最小生成树的入门题,看了poj1251Jungle Roads,是一个裸最小生成树,敲了代码后发现字符输入有点小错误,加了个getchar(),输入过了,但交上去之后居然超时,算了一下没道理超时啊,应该是输入问题,将输入改成字符串,再交上去,果断AC啊。

 

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;
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  百度 struct