3.B - Frogger
题目连接 http://acm.hust.edu.cn/vjudge/B
这题整个看得稀里糊涂。。用了求最小生成树的另一种算法 prime 算法,自己用kruskal算法怎么都做不对,也不知道是
哪里错了。
#include<iostream> #include<cstdlib> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; pair<int,int>a[200]; double lowcost[200],cost[200]; double map[200][200]; int main() { int n; int k=1; while(scanf("%d",&n)&&n!=0) { int i,j; for(i=0;i<n;i++) scanf("%d %d",&a[i].first,&a[i].second); memset(lowcost,0,sizeof(lowcost)); for(i=0;i<n;i++) for(j=0;j<n;j++) map[i][j]=sqrt((pow(1.0*(a[i].first-a[j].first),2)+pow(1.0*(a[i].second-a[j].second),2))); double ans=0.0; for(i=0;i<n;i++) { lowcost[i]=map[0][i]; cost[i]=0; } for(i=0;i<n;i++) { double m=1.0*(1<<20); int x; for(j=0;j<n;j++) if(lowcost[j]&&lowcost[j]<=m) m=lowcost[x=j]; if(ans<m) ans=m; lowcost[x]=0.0; if(x==1) break; for(j=0;j<n;j++) { if(map[j][x]<lowcost[j]) { lowcost[j]=map[j][x]; cost[j]=x; } } } printf("Scenario #%d\n",k); printf("Frog Distance = %.3lf\n",ans);//%m.n m是域宽,n 是小数点位数 printf("\n"); k++; } return 0; }