坑點在輸入部分可能有極大值情況,即比0x3f3f3f3f還大的情況,此情況應該做不錄入處理
#include <stdio.h>
#include <stdlib.h>#include <string.h>
#define max 0x3f3f3f3f
int map[111][111];
int vis[111];
int ppp[111];
int n,m,now;
int prim()
{
int i,min,j,end;
end=0;
for(i=1; i<=n; i++)
{
if(i!=1)
ppp[i]=map[1][i];
}
vis[1]=1;
for(j=1; j<n; j++)
{
min=max;
for(i=1; i<=n; i++)
{
if(vis[i]==0&&min>ppp[i])
{
min=ppp[i];
now=i;
}
}
if(min==max)return -1;
end+=min;
vis[now]=1;
for(i=1; i<=n; i++)
{
if(vis[i]==0&&ppp[i]>map[now][i])
{
ppp[i]=map[now][i];
}
}
}
return end;
}
int main()
{
int i,a,b,c;
while(~scanf("%d%d",&n,&m))
{
memset(map,max,sizeof(map));
memset(vis,0,sizeof(vis));
memset(ppp,max,sizeof(ppp));
for(i=0; i<m; i++)
{
scanf("%d%d%d",&a,&b,&c);
if(map[a][b]>c){
map[a][b]=c;
map[b][a]=c;
}
}
printf("%d\n",prim());
}
return 0;
}