题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1863
这题你把村庄数定义到100就是wa,估计数据大于等于100了。。。
#include <cstdio>
#include <cstring>
#define INF 0x3fffffff
int m,n;
int graph[110][110];
bool visit[110];
int dis[110];
int sum;
int prim()
{
int i,j;
for(i=1;i<=n;i++)
dis[i]=graph[1][i];
visit[1]=true;
for(i=1;i<n;++i)
{
int min=INF,pos;
for(j=1;j<=n;++j)
{
if(!visit[j]&&min>dis[j])
{
min=dis[j];
pos=j;
}
}
if(min==INF)
break;
sum+=min;
visit[pos]=true;
for(j=1;j<=n;++j)
{
if(!visit[j]&&dis[j]>graph[pos][j])
{
dis[j]=graph[pos][j];
}
}
}
if(i==n)
printf("%d\n",sum);
else
printf("?\n");
return sum;
}
int main()
{
int i,j,x,y,z;
while(~scanf("%d%d",&m,&n)&&m)
{
sum=0;
memset(graph,0,sizeof(graph));
memset(visit,false,sizeof(visit));
memset(dis,0,sizeof(dis));
for(i=1;i<=n;++i)
{
for(j=1;j<=n;++j)
{
if(i!=j)
graph[i][j]=INF;
}
}
for(i=1;i<=m;++i)
{
scanf("%d%d%d",&x,&y,&z);
if(graph[x][y]>z)
graph[x][y]=graph[y][x]=z;
}
prim();
}
return 0;
}