题意:求解从起点到终点的所有路径中,最长边最小是多少?
思路:dijkstra算法变形,用d[i]表示某条路径中的最长边即可。
AC代码:
#include <iostream> #include <cstdio> #include <cmath> #include <cstring> using namespace std; #define inf 0x7ffffff double edge[205][205]; double x[205],y[205],d[205],v[205]; int n; double dijkstra() { for(int i=0;i<n;i++) d[i]=(i==0?0:inf); memset(v,0,sizeof(v)); for(int i=0;i<n;i++) { double minn=inf; int p; for(int j=0;j<n;j++) { if(!v[j]&&d[j]<minn) { minn=d[j]; p=j; } } v[p]=1; for(int j=0;j<n;j++) { if(!v[j]) d[j]=min(d[j],max(edge[p][j],d[p])); // !!! // cout<<d[j]<<endl; } } return d[1]; } int main() { int k=1; while(scanf("%d",&n)!=EOF&&n) { for(int i=0;i<n;i++) scanf("%lf%lf",&x[i],&y[i]); for(int i=0;i<n;i++) for(int j=0;j<n;j++) { edge[i][j]=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])); //cout<<edge[i][j]<<endl; } double ans = dijkstra(); printf("Scenario #%d\nFrog Distance = %.3lf\n\n",k++,ans); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/mowenwen_/article/details/46999527