zoukankan      html  css  js  c++  java
  • POJ 2253 Frogger 最短路Dijkstra的变形形式

    题目地址: http://poj.org/problem?id=2253


    题目大意,给n个点的坐标,要求从第一个点到第二个点所走的所有的边最大的那个边s。

    求s的最小值。


    用一个maxdis记录当前的最大值,

    dis[i]表示的是,从1到i点走的边最大的那条边,

    只要遇到2直接返回maxdis即可。


    代码如下:

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cmath>
    #include <cstring>
    #include <string>
    #include <algorithm>
    #include <vector>
    #include <set>
    #include <map>
    #include <queue>
    using namespace std;
    
    /*
    freopen("input.txt",  "r", stdin);
    freopen("output.txt", "w", stdout);
    */
    
    int n,s[205];
    double edge[205][205],dis[205],x[205],y[205];
    //这里的dis[i]表示的是,从1到i点走的边最大的那条边
    
    double Dijkstra(int be)
    {
        int i,j,k;
        double temp,maxdis=0;
        for(i=1;i<=n;i++)
        {
            dis[i]=edge[be][i];
            s[i]=0;
        }
        s[be]=1;dis[be]=0;
        for(i=1;i<=n;i++)
        {
            temp=0x7f7f7f7f;
            k=1;
            for(j=1;j<=n;j++)
                if(!s[j]&&dis[j]<temp)
                {
                    k=j;temp=dis[j];
                }
            if(temp>maxdis)//如果当前最大的大于maxdis
                maxdis=temp;
            if(k==2)//如果到了2这个点,直接返回maxdis,因为没有要求走哪条路
                return maxdis;
            s[k]=1;
            for(j=1;j<=n;j++)
                if(!s[j])
                {
                    double ss=edge[k][j];
                    if(ss<dis[j])//如果从k到j小于从1到j
                        dis[j]=ss;
                }
        }
    }
    
    int main()
    {
    
        int i,j,casei=0;
        while(cin>>n,n)
        {
            for(i=1;i<=n;i++)
            {
                edge[i][i]=0;
                scanf("%lf%lf",&x[i],&y[i]);
                for(j=1;j<i;j++)
                {
                    double temp=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
                    edge[i][j]=edge[j][i]=temp;
                }
            }
            printf("Scenario #%d\nFrog Distance = %.3f\n\n",++casei,Dijkstra(1));
        }
        return 0;
    }
    


  • 相关阅读:
    volatile关键字——确保本指令不会因编译器的优化而省略
    c#判断字符串是否为空或null
    python+selenium基础之XPATH轴定位
    python+selenium基础之XPATH定位
    在python中使用正则表达式
    selenium 的css选择器语法
    selenium用法详解
    selenium+requests进行cookies保存读取操作
    Python selenium 三种等待方式详解
    selenium 显示等待应用
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3015688.html
Copyright © 2011-2022 走看看