POJ 2253 —— Frogger

来源:互联网 发布:给二维数组赋初值 编辑:程序博客网 时间:2024/06/05 05:43

原题:http://poj.org/problem?id=2253

题意:有n个石头,给出每个石头的坐标;青蛙A在第一块石头,青蛙B在第二块石头,A要去找B;

求A到B的所有路径中最小的Frog Distance,Frog Distance定义为青蛙A在某条路径中所跳的最大距离;


#include<cstdio>#include<cstring>#include<string>#include<cmath>#define inf 1e9using namespace std;const int maxn = 250;bool vis[maxn];int dis[maxn], d[maxn][maxn];int n, T = 0;struct node{int x, y;}p[maxn];void Dijkstra(){memset(vis, false, sizeof vis);for(int i = 1;i<=n;i++)dis[i] = d[i][1];vis[1] = true;for(int i = 1;i<=n;i++){int k = -1;int minn = inf;for(int j = 1;j<=n;j++){if(!vis[j] && minn >= dis[j]){k = j;minn = dis[j];}}if(k == -1)break;vis[k] = true;for(int j = 1;j<=n;j++){if(!vis[j]){int t = max(dis[k], d[k][j]);dis[j] = min(dis[j], t);}}}}int main(){while(~scanf("%d", &n)){if(n == 0)break;for(int i = 1;i<=n;i++)scanf("%d%d", &p[i].x, &p[i].y);for(int i = 1;i<=n;i++){int x1 = p[i].x, y1 = p[i].y;for(int j = 1;j<=n;j++){int x2 = p[j].x, y2 = p[j].y;d[i][j] = (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2);}d[i][i] = 0;}Dijkstra();float ans = sqrt(1.0*dis[2]);printf("Scenario #%d\n", ++T);printf("Frog Distance = %.3f\n\n", ans);}return 0;}


0 0
原创粉丝点击