zoukankan      html  css  js  c++  java
  • poj2253 青蛙

      由于前几天看的SPFA,然后我一看题,想都没想就拿SPFA来写了,果断超时,不对。应该可以的,还是我没学到家。不对。

      然后我知道这样不行,不能一求最短路啥的就想都不想就那SPFA来写,就今天上午系统的看了下dijkstra,kruskal,prim,spfa,flyod,把这几个都看了,系统的了解了一下,然后我中午用的dijkstra写的,果断又wa!!!!!一翻disscuss,有人说%f,%lf要注意,我把%lf改成了%f,然后果断过了。微艰难。

      这题目松弛的时候就是   dist[u]<=dist[k]&&gird[u][k]<dist[k]. //dist表示从1位置到该位置所需跳跃的最大值。gird[][]表示两位置之间的距离。然后dist[k]=max(dist[k],gird[u][k])

    #include <iostream>
    #include <stdio.h>
    #include <queue>
    #include <algorithm>
    #include <string.h>
    #include <cmath>
    #define  maxn 200+10
    #define  INF 0xfffffff
    using namespace std;
    bool inq[maxn];
    double dist[maxn];
    int S[maxn];
    double gird[maxn][maxn];
    int path[maxn];
    int n;
    queue<int>Q;
    double ssqrt(int a,int b)
    {
        double t;
        t= sqrt( a*a+b*b );
        return t;
    }
    
    double dijkstra(int begin)
    {
        int i,j,k;
        for(i=1;i<=n;++i)
        {
            dist[i]=gird[begin][i];
            S[i]=0;
        }
        S[begin]=1;
        dist[begin]=0;
        for(i=1;i<=n;++i)
        {
            double min=INF;
            int u=begin;
            for(j=1;j<=n;++j)
            {
                if(!S[j]&&dist[j]<min)
                {
                    u=j;
                    min=dist[j];
                }
            }
            S[u]=1;
            for(k=1;k<=n;++k)
            {
                if(!S[k] && ( dist[u]<dist[k]&&gird[u][k]<dist[k]  ) )
                {
                    dist[k]=( dist[u]>gird[u][k]?dist[u]:gird[u][k]  );
                }
            }
        }
        return dist[2];
    }
    int main()
    {
        int i,j;
        int x[maxn],y[maxn];
        double res;
        int cnt=0;
        while(~scanf("%d",&n)&&n)
        {
            for(i=1;i<=n;++i)
            {
                scanf("%d%d",&x[i],&y[i]);
            }
            for(i=1;i<=n;++i)      //init the graph
            {
                for(j=1;j<=n;++j)
                {
                    gird[i][j]=gird[j][i]=ssqrt(x[i]-x[j],y[i]-y[j]);
                }
            }
            res=dijkstra(1);
            printf("Scenario #%d\n",++cnt);
            printf("Frog Distance = %.3f\n",res);
            printf("\n");
        }
        return 0;
    }
  • 相关阅读:
    Array.prototype.slice.call(arguments)
    change,propertychange,input事件小议
    H5项目常见问题汇总及解决方案
    director.js:客户端的路由---简明中文教程
    Web APP开发技巧总结
    Flex 布局教程:语法篇
    解决iPhone中overflow:scroll;滑动速度慢或者卡的问题
    flexbox布局的兼容性
    移动前端知识总结
    使用React重构百度新闻webapp前端
  • 原文地址:https://www.cnblogs.com/symons1992/p/3077725.html
Copyright © 2011-2022 走看看