首页 > 代码库 > poj 2253 Frogger (最长路中的最短路)
poj 2253 Frogger (最长路中的最短路)
链接:poj 2253
题意:给出青蛙A,B和若干石头的坐标,现青蛙A想到青蛙B那,A可通过任意石头到达B,
问从A到B多条路径中的最长边中的最短距离
分析:这题是最短路的变形,以前求的是路径总长的最小值,而此题是通路中最长边的最小值,每条边的权值可以通过坐标算出,因为是单源起点,直接用SPFA算法或dijkstra算法就可以了
SPFA 16MS
#include<cstdio> #include<queue> #include<cmath> #include<climits> using namespace std; double a[205][205],dis[205]; int vis[205]; double max(double a,double b) { return a>b?a:b; } void SPFA(int n) { queue<int> q; int i,j; for(i=2;i<=n;i++){ dis[i]=INT_MAX; vis[i]=0; } dis[1]=0; q.push(1); vis[1]=1; while(!q.empty()){ i=q.front(); q.pop(); vis[i]=0; for(j=1;j<=n;j++) if(dis[j]>max(dis[i],a[i][j])){ dis[j]=max(dis[i],a[i][j]); if(!vis[j]){ q.push(j); vis[j]=1; } } } } int main() { int i,j,n,k=0,x[205],y[205]; while(scanf("%d",&n)!=EOF){ if(n==0) break; k++; printf("Scenario #%d\n",k); for(i=1;i<=n;i++) scanf("%d%d",&x[i],&y[i]); for(i=1;i<=n;i++) for(j=1;j<=i;j++) a[i][j]=a[j][i]=sqrt(double(x[i]-x[j])*(x[i]-x[j])+double(y[i]-y[j])*(y[i]-y[j])); SPFA(n); printf("Frog Distance = %.3lf\n\n",dis[2]); } return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。