zoukankan      html  css  js  c++  java
  • poj 2253 Frogger (最小最大路段)【dijkstra】

    <题目链接>

    题目大意:

    给出青蛙A,B和若干石头的坐标,现青蛙A想到青蛙B那,A可通过任意石头到达B,问从A到B多条路径中最小的最长边。

    解题分析:

    这是最短路的一类典型题目,与普通的最短路的不同之处在于松弛操作。

    #include <cstdio>
    #include <cmath>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    
    #define N 205
    int n;
    struct Node{
        int x,y;
        Node(int _x=0,int _y=0):x(_x),y(_y){}
    }node[N];
    bool vis[N];
    double dist[N];
    double dis(Node a,Node b){
        return (double)sqrt(1.0*(a.x-b.x)*(a.x-b.x)+1.0*(a.y-b.y)*(a.y-b.y));
    }
    void Dij(){
        memset(vis,0,sizeof(vis));
        for(int i=1;i<=n;i++)dist[i]=dis(node[1],node[i]);
        for(int i=1;i<=n;i++){
            int cur;double mn=1e9;
            for(int j=1;j<=n;j++){
                if(!vis[j] && dist[j]<mn)
                    mn=dist[j],cur=j;
            }
            vis[cur]=1;
            for(int j=1;j<=n;j++){
                if(!vis[j] && dist[j]>max(dist[cur],dis(node[cur],node[j]))){    //得到最小的最大路段值
                    dist[j]=max(dist[cur],dis(node[cur],node[j]));
                }
            }
        }
    }
    int main(){
        int ncase=0;
        while(scanf("%d",&n)!=EOF,n){
            for(int i=1;i<=n;i++){
                int u,v;scanf("%d%d",&u,&v);
                node[i]=Node(u,v);
            }
            Dij();
            printf("Scenario #%d
    ",++ncase);
            printf("Frog Distance = %.3lf
    
    ",dist[2]);
        }
    }

    2018-08-26

  • 相关阅读:
    《重构》读书笔记
    每周总结
    《修改代码的艺术》读书笔记
    每周总结
    每周总结
    《修改代码的艺术》读书笔记
    每周总结
    第二周周总结
    以淘宝网为例,描绘质量属性的六个常见属性场景
    机器学习第八讲
  • 原文地址:https://www.cnblogs.com/00isok/p/9539170.html
Copyright © 2011-2022 走看看