zoukankan      html  css  js  c++  java
  • POJ 2253 Frogger

    传送门:http://poj.org/problem?id=2253

    解题思路:

    参考:http://www.cnblogs.com/freezhan/p/3238967.html

    题目求的是青蛙从一个石头跳到另一个石头,它最大的一步只需要多大。

    实现代码:

    注意:用G++提交没有通过,c++过了

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    using namespace std;
    
    const int maxn=205;
    struct Point{
        double x,y;
    }p[maxn];
    
    double w[maxn][maxn];
    
    double dist(Point a,Point b){
        return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
    }
    
    void floyd(int n){
        for(int k=1;k<=n;k++)
            for(int i=1;i<=n;i++)
                for(int j=1;j<=n;j++)
                    w[i][j]=min(w[i][j],max(w[i][k],w[k][j]));
    }
    
    void init(int n){
        for(int i=1;i<=n;i++){
            w[i][i]=0;
            for(int j=i+1;j<=n;j++)
                w[i][j]=w[j][i]=dist(p[i],p[j]);
        }
    }
    
    int main(){
        int n;
        int t=0;
        while(scanf("%d",&n)!=EOF){
            if(n==0) break;
            for(int i=1;i<=n;i++){
                scanf("%lf%lf",&p[i].x,&p[i].y);
            }
    
    
            init(n);
            floyd(n);
            printf("Scenario #%d
    ", ++t);
            printf("Frog Distance = %.3lf
    
    ", w[1][2]);
    
        }
    }

     Dijkstra方法:

    #include <iostream>
    #include <cstring>
    #include <algorithm>
    #include <cstdio>
    #include <queue>
    #include <cmath>
    using namespace std;
    
    const int V=205;
    const double INF=99999999999;
    struct Point{
        double x,y;
    }p[V];
    
    struct NodeHeap{
        int d,u;
        NodeHeap(int _d,int _u){
            d=_d;
            u=_u;
        }
        bool operator <(const NodeHeap &rhs)const{
            return d>rhs.d;
        }
    };
    
    double w[V][V],dis[V];
    int vis[V];
    double dist(Point a,Point b){
        return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
    }
    
    void init(int n){
        for(int i=1;i<=n;i++){
            w[i][i]=0;
            for(int j=i+1;j<=n;j++){
                w[i][j]=dist(p[i],p[j]);
                w[j][i]=w[i][j];
            }
        }
    }
    
    
    double Dijkstra(int n){
        init(n);
        double ans=0;
        for(int i=0;i<=n;i++){
            dis[i]=INF;
            vis[i]=0;
        }
    
        priority_queue<NodeHeap> pq;
        pq.push(NodeHeap(0,1));
          dis[1]=0;
        vis[1]=1;
    
        while(!pq.empty()){
            NodeHeap x=pq.top();
            pq.pop();
            int u=x.u;
            vis[u]=1;
            if(ans<dis[u]&&dis[u]!=INF){
                ans=dis[u];
            }
    
            if(u==2) return ans;
    
            for(int i=1;i<=n;i++){
                if(!vis[i]){
                    dis[i]=min(dis[i],w[i][u]);
                    pq.push(NodeHeap(dis[i],i));
                }
            }
    
        }
         return ans;
    }
    
    int main(){
        int k=0;
        int n;
        while(scanf("%d",&n)!=EOF){
            if(n==0) break;
            for(int i=1;i<=n;i++){
                scanf("%lf%lf",&p[i].x,&p[i].y);
            }
            printf("Scenario #%d
    ",++k);
            printf("Frog Distance = %.3f
    
    ",Dijkstra(n));
    
        }
        return 0;
    }
    自己选的路,跪着也要把它走完------ACM坑
  • 相关阅读:
    JAVA中final关键字的作用
    JAVA作用域和排序算法介绍
    JAVA的控制结构
    Java概述
    P6329 【模板】点分树 | 震波[点分树]
    BZOJ #4771. 七彩树 [主席树,链并,差分]
    CF1276F Asterisk Substrings [后缀自动机]
    P4173 残缺的字符串 [FFT]
    CF528D Fuzzy Search [FFT]
    #4589. Hard Nim [FWT]
  • 原文地址:https://www.cnblogs.com/IKnowYou0/p/6480335.html
Copyright © 2011-2022 走看看