标签:
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 8070 Accepted Submission(s):
4084
1 #include <cmath> 2 #include <cstdio> 3 #include <cstring> 4 #include <iostream> 5 using namespace std; 6 const int INF = 0x3f3f3f3f; 7 double map[110][110], dis[110]; bool vis[110]; 8 int n; 9 struct point 10 { 11 double x, y; 12 } num[110]; 13 double Prim() 14 { 15 memset(vis, true, sizeof(vis)); 16 for(int i = 1; i <= n; i++) 17 dis[i] = map[1][i]; 18 vis[1] = false; double sum = 0.0; 19 for(int i = 1; i < n; i++) 20 { 21 int temp; double min = INF; 22 for(int j = 1; j <= n; j++) 23 { 24 if(vis[j] && dis[j] < min) 25 { 26 temp = j; 27 min = dis[j]; 28 } 29 } 30 vis[temp] = false; 31 sum += min; 32 for(int j = 1; j <= n; j++) 33 { 34 if(vis[j] && dis[j] > map[temp][j]) 35 dis[j] = map[temp][j]; 36 } 37 } 38 return sum; 39 // printf("%.2lf\n", sum); 40 } 41 int main() 42 { 43 while(~scanf("%d", &n)) 44 { 45 for(int i = 1; i <= n; i++) 46 scanf("%lf %lf", &num[i].x, &num[i].y); 47 for(int i = 1; i <= n; i++) 48 { 49 map[i][i] = 0.0; 50 for(int j = 1; j < i; j++) 51 map[j][i] = map[i][j] = sqrt((num[i].x - num[j].x)*(num[i].x - num[j].x) + (num[i].y-num[j].y)*(num[i].y-num[j].y)); 52 } 53 printf("%.2lf\n",Prim()); 54 } 55 return 0; 56 }
杭电1162--Eddy's picture(Prim()算法)
标签:
原文地址:http://www.cnblogs.com/fengshun/p/4719650.html