ZOJ1203 Swordfish

来源:互联网 发布:淘宝掌柜好评回复评语 编辑:程序博客网 时间:2024/05/25 08:13
/*prim算法,网上资料很多,在此不赘述*/#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>int n;bool visit[111];double low[111];double distance[111][111];void prim(int num){int i, cnt = 0;for(i = 0; i < n; i++){if(visit[i])cnt++;}if(cnt == n)return;double min = 99999999;for(i = 0; i < n; i++){if(!visit[i])low[i] = low[i] > distance[num][i] ? distance[num][i] : low[i];}for(i = 0; i < n; i++){if(!visit[i]){if(min > low[i]){min = low[i];num = i;}}}visit[num] = 1;prim(num);return;}int main(void){int i, j, cas = 0;double min;double xy[111][2];while(scanf("%d", &n), n){min = 0;memset(visit, 0, sizeof visit);memset(low, 0, sizeof low);memset(distance, 0, sizeof distance);for(i = 0; i < n; i++)scanf("%lf%lf", &xy[i][0], &xy[i][1]);for(i = 0; i < n; i++){for(j = 0; j < n; j++)distance[i][j] = sqrt((xy[i][0] - xy[j][0]) * (xy[i][0] - xy[j][0]) + (xy[i][1] - xy[j][1]) * (xy[i][1] - xy[j][1]));}visit[0] = 1;for(i = 0; i < n; i++)low[i] = distance[0][i];prim(0);for(i = 0; i < n; i++)min += low[i];if(cas)printf("\n");printf("Case #%d:\nThe minimal distance is: %.2lf\n", ++cas, min);}}

0 0
原创粉丝点击