zoukankan      html  css  js  c++  java
  • Frogger--poj2253

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

    题意:The frog distance (humans also call it minimax distance) between two stones therefore is defined as the minimum necessary jump range over all possible paths between the two stones.
    这句话很重要,题中求得是青蛙一次至少跳多远才能成功到达对方所在的地方;即求所有路径中每条路径中的最大距离的最小值(求一条1~2的路径使得路径上的最大边权最小)

    floyd中更新距离改成更新最小的最大边权;

    #include<iostream>
    #include<stdio.h>
    #include<math.h>
    #include<string.h>
    #include<algorithm>
    #define INF 0xfffffff
    #define N 1100
    using namespace std;
    int n;
    double maps[N][N];
    
    struct node
    {
        int x,y;
    }a[N];
    void Floyd()
    {
        int i,j,k;
        for(k=1;k<=n;k++)
        {
            for(i=1;i<=n;i++)
            {
                for(j=1;j<=n;j++)
                {
                    maps[i][j]=min(maps[i][j],max(maps[i][k],maps[k][j]));
                }
            }
        }
    }
    
    int main()
    {
        int i,j,k,x,y,t=1;
    
        while(scanf("%d",&n),n)
        {
            memset(a,0,sizeof(a));
    
            k=1;
    
            for(i=1;i<=n;i++)
            {
                scanf("%d%d",&x,&y);
    
                for(j=1;j<=k;j++)
                {
                    double d=sqrt((x-a[j].x)*(x-a[j].x)+(y-a[j].y)*(y-a[j].y));
    
                    maps[i][j]=maps[j][i]=d;
                }
    
                a[k].x=x,a[k].y=y,k++;
            }
            for(i=1;i<=n;i++)
    
                maps[i][i]=0;
    
            Floyd();
    
            printf("Scenario #%d
    Frog Distance = %.3f
    
    ",t++,maps[1][2]);
        }
        return 0;
    }
    View Code

     用Dij算法就相当与prim;

    dist[i] 代表i点之前的那个点到i的最短距离;求最短中的最长;

    #include<iostream>
    #include<stdio.h>
    #include<math.h>
    #include<string.h>
    #include<algorithm>
    #define INF 0xfffffff
    #define N 1100
    using namespace std;
    int n,vis[N];
    double maps[N][N],dist[N],ans;
    struct node
    {
        int x,y;
    }a[N];
    void Dij()
    {
        int i,j,index;
        dist[1]=0;
        for(i=1;i<=n;i++)
        {
            double Min=INF;
            for(j=1;j<=n;j++)
            {
                if(vis[j]==0&&Min>=dist[j])
                    Min=dist[j],index=j;
            }
            vis[index]=1;
            if(ans<dist[index]&&dist[index]!=INF)
                ans=dist[index];
            if(index==2)
                return ;
            for(j=1;j<=n;j++)
            {
                if(vis[j]==0)
                    dist[j]=min(dist[j],maps[index][j]);
            }
        }
    }
    int main()
    {
        int i,j,k,x,y,t=1;
        while(scanf("%d",&n),n)
        {
            memset(vis,0, sizeof(vis));
            memset(a,0,sizeof(a));
            for(i=0;i<=n;i++)
                dist[i]=INF;
            k=1;
            for(i=1;i<=n;i++)
            {
                scanf("%d%d",&x,&y);
                for(j=1;j<=k;j++)
                {
                    double d=sqrt((x-a[j].x)*(x-a[j].x)+(y-a[j].y)*(y-a[j].y));
                    maps[i][j]=maps[j][i]=d;
                }
                a[k].x=x,a[k].y=y,k++;
            }
            for(i=1;i<=n;i++)
                maps[i][i]=0;
            ans=0;
            Dij();
            printf("Scenario #%d
    Frog Distance = %.3f
    
    ",t++,ans);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    wpf 用c#代码给img指定uri
    c 指针作为出参
    wpf获得系统毫秒数
    绑定元素的长宽(Canvas的子类自动伸展)
    PB与COM之关于创建COM,MTS, and COM+组件(1)
    ASA破解密码
    遭遇奸商(显卡篇)
    “启动Word时提示出错,只能用安全模式才能打开”的解决方法
    PowerSocket对象与HostName
    制做集成SATA驱动的XP安装盘
  • 原文地址:https://www.cnblogs.com/zhengguiping--9876/p/4667159.html
Copyright © 2011-2022 走看看