• 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循环控制语句loop使用
    可实现的全局唯一有序ID生成策略
    ElasticSearch使用RestHighLevelClient进行搜索查询
    基于Redis实现分布式定时任务调度
    python脚本生成exe程序
    敏捷开发--工作流程的梳理
    React-菜鸟学习笔记(二)
    React-菜鸟学习笔记(一)
    ZooKeeper-基础介绍
    常用排序算法的Java实现与分析
  • 原文地址:https://www.cnblogs.com/IKnowYou0/p/6480335.html
Copyright © 2020-2023  润新知