POJ - 2253 Frogger

Frogger
题 意:池塘里有一只男青蛙,一只女青蛙,男青蛙想去拜访女青蛙。男青蛙在1号石头上,女青蛙在2号石头上,池塘里还有一些其他的石头,可以给男青蛙跳的时候短暂停息。问男青蛙一次跳的最大长度最小是多少。祠堂总共有n的石头.
数据范围:
2<=n<=200
0<=xi,yi<=1000
样例输入:

2    //n个石头
0 0  //石头坐标
3 4

3
17 4
19 4
18 5

0//输出结束

样例输出:

Scenario #1
Frog Distance = 5.000

Scenario #2
Frog Distance = 1.414

思 路:最短路的变型,以前更新最短距离,现在更新到节点j的最大距离最小是多少。每次取最大距离最小的点出来更新就行。

收 获:对dijkstra有了更加深刻的理解。扩宽了写最短路的思维。

#include<cstring>
#include<algorithm>
#include<iostream>
#include<cstdio>
#include<vector>
#include<queue>
#include<cmath>
using namespace std;
const double INF = 0x3f3f3f3f;
const int maxn = 1e3+5;
typedef pair<double,int> P;
struct edge{
    int to;
    double cost;
};
struct node{
    double x,y;
    int id;
}a[maxn];
vector<edge> G[maxn];
double d[maxn];
int n;
double dis(double x1,double y1,double x2,double y2){
    double temp1 = (x1-x2)*(x1-x2);
    double temp2 = (y1-y2)*(y1-y2);
    return sqrt(temp1+temp2);
}
void dijkstra(int s){
    fill(d,d+1+n,INF);
    d[s] = 0;
    priority_queue<P,vector<P>,greater<P> >que;
    que.push(P(0,s));
    while(que.size()){
        P p = que.top();que.pop();
        int v = p.second;
        if(p.first > d[v]) continue;
        for(int i=0;i<G[v].size();i++){
            edge e = G[v][i];
            double temp = max(d[v],e.cost);
            if(d[e.to] > temp){
                d[e.to] = temp;
                que.push(P(d[e.to],e.to));
            }
        }
    }
}
void init(){
    for(int i=0;i<=n;i++)G[i].clear();
    memset(d,0,sizeof(d));
}
int main(){
    int Case = 1;
    while(~scanf("%d",&n) &&n){
        init();
        for(int i=1;i<=n;i++){
            scanf("%lf %lf",&a[i].x,&a[i].y);
            a[i].id = i;
        }
        for(int i=1;i<=n;i++){
            for(int j=i+1;j<=n;j++){
                double temp = dis(a[i].x,a[i].y,a[j].x,a[j].y);
                G[i].push_back(edge{j,temp});
                G[j].push_back(edge{i,temp});
            }
        }
        dijkstra(1);
        printf("Scenario #%d\n",Case++);
        printf("Frog Distance = %.3f\n\n",d[2]);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_37129433/article/details/81515687
今日推荐