Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 28785 | Accepted: 9348 |
Description
Input
Output
Sample Input
2 0 0 3 4 3 17 4 19 4 18 5 0
Sample Output
Scenario #1 Frog Distance = 5.000 Scenario #2 Frog Distance = 1.414
求最小的最大距离。
//用G++WA 而c++AC。。。- -。#include<cstdio> #include<cstring> #include<iostream> #include<math.h> using namespace std; double dis[300][300]; int n,m,s=0; struct ndoe { int a,b; }q[300]; double max(double x,double y) { return x>y?x:y; } double min(double x,double y) { return x<y?x:y; } void floyd() { int i,j,k; for(k=0;k<n;k++) { for(i=0;i<n;i++) { for(j=0;j<n;j++) { dis[i][j]=min( dis[i][j],max(dis[i][k],dis[k][j]) );//求最小的最大距离,外没有if(dis[i][j]>dis[i][k]+dis[k][j])条件 } } } } int main() { int i,j,k,x,y; while(cin>>n&&n) { s++; for(i=0;i<n;i++) { cin>>q[i].a>>q[i].b;//注意对于点的坐标形式,要用结构体或数组来装。 } for(i=0;i<n;i++) { for(j=0;j<n;j++) { if(i!=j) dis[i][j]=sqrt( (q[i].a-q[j].a)*1.0*(q[i].a-q[j].a)+(q[i].b-q[j].b)*1.0*(q[i].b-q[j].b) ); else dis[i][j]=0; } } floyd(); printf("Scenario #%d\n",s); printf("Frog Distance = %.3lf\n",dis[0][1]); printf("\n"); } return 0; }
法二:SPFA求解最短路中的最小中的最大路径长度。(PS:POJ中最好不要用lf而用f)
#include<iostream> #include<cstdio> #include<cstring> #include<map> #include<queue> #include<cmath> #include<algorithm> #define MAX 1000 #define inf 0x3f3f3f3f using namespace std; struct node{ double a,b; }q[300]; double a[400][400],dis[400]; bool vis[4000]; int n; void SPFA(){ for(int i=0;i<=n;i++){ vis[i]=false; } fill(dis,dis+n,inf);///注意不要对浮点类型的数组进行memset()的初始化,要用循环或者是fill memset(vis,false,sizeof(vis)); queue<int>q; while(!q.empty()) q.pop(); dis[0]=0; q.push(0); vis[0]=true; while(!q.empty()){ int v=q.front(); q.pop();vis[v]=false; for(int i=0;i<n;i++){ if(dis[i]>max(dis[v],a[v][i]) ){ dis[i]=max(dis[v],a[v][i]); if(!vis[i]){ vis[i]=true; q.push(i); } } } } } int main(){ int m,i,j,k,cnt=1; while(~scanf("%d",&n)&n){ for(i=0;i<n;i++){ scanf("%lf%lf",&q[i].a,&q[i].b); } for(i=0;i<n;i++){ for(j=0;j<=i;j++){ a[i][j]=a[j][i]=sqrt((q[i].a-q[j].a)*(q[i].a-q[j].a)+(q[i].b-q[j].b)*(q[i].b-q[j].b) ); //printf("%.2lf\n",a[i][j]); } } SPFA(); printf("Scenario #%d\n",cnt++); printf("Frog Distance = %.3f\n\n",dis[1]); } return 0; }