hdu 1162 Eddy's picture

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 1554    Accepted Submission(s): 677

本题非常简单,最小生成树问题,直接抄模板即可

代码:

  
    
1 #include < stdio.h >
2 #include < math.h >
3   struct node
4 {
5 double x,y;
6 }s[ 105 ];
7   int n;
8   double prim( int v0)
9 {
10 int i,j,visit[ 105 ],u;
11 double sum = 0 ,min,distance[ 105 ],s1;
12 for (i = 1 ;i <= n;i ++ )
13 {
14 distance[i] = sqrt((s[v0].x - s[i].x) * (s[v0].x - s[i].x) + (s[v0].y - s[i].y) * (s[v0].y - s[i].y));
15 visit[i] = 0 ;
16 }
17 visit[v0] = 1 ;
18 for (i = 1 ;i < n;i ++ )
19 {
20 min = 0xfffffff ;
21 for (j = 1 ;j <= n;j ++ )
22 {
23 if ( ! visit[j] && distance[j] < min)
24 {
25 u = j;
26 min = distance[j];
27 }
28 }
29 sum += min;
30 visit[u] = 1 ;
31 for (j = 1 ;j <= n;j ++ )
32 {
33 s1 = sqrt((s[u].x - s[j].x) * (s[u].x - s[j].x) + (s[u].y - s[j].y) * (s[u].y - s[j].y));
34 if ( ! visit[j] && s1 < distance[j])
35 distance[j] = s1;
36 }
37 }
38 return sum;
39 }
40 int main()
41 {
42 int i; double x,y;
43 while (scanf( " %d " , & n) != EOF)
44 {
45 for (i = 1 ;i <= n;i ++ )
46 {
47 scanf( " %lf%lf " , & x, & y);
48 s[i].x = x;
49 s[i].y = y;
50 }
51 printf( " %.2lf\n " ,prim( 1 ));
52 }
53 return 0 ;
54 }

 

 

你可能感兴趣的:(HDU)