题目没什么好说,最小生成树。。。再次NC的把更新策略写成了dij的:len[i]=len[pos]+map[pos][i],该打该打。。
1
# include <stdio.h>
2
# include <string.h>
3
# define N 55
4
int map[N][N];
5
int len[N];
6
int main()
7

{
8
int n,r,i;
9
while(1)
10
{
11
int res=0;
12
scanf("%d%d",&n,&r);
13
memset(map,-1,sizeof(map));
14
if(!n) break;
15
while(r--)
16
{
17
int a,b,l;
18
scanf("%d%d%d",&a,&b,&l);
19
if(map[a][b]==-1||map[a][b]>l)
20
map[a][b]=map[b][a]=l;
21
}
22
memset(len,-1,sizeof(len));
23
len[1]=0;
24
for(i=1;i<=n;i++)
25
{
26
int j,min=0xfffffff,pos;
27
for(j=1;j<=n;j++)
28
if(len[j]>=0&&len[j]<min)
29
min=len[j],pos=j;
30
res+=len[pos];
31
len[pos]=-2;
32
for(j=1;j<=n;j++)
33
if(map[pos][j]!=-1&&(len[j]==-1||len[j]>map[pos][j]))
34
len[j]=map[pos][j];
35
}
36
printf("%d\n",res);
37
}
38
return 0;
39
}
40