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

    题意:找第0个顶点到第1个顶点建,每条边距离最小的那个长度

    思路:Dijkstra松弛的时候改一下就行了

    notice:WA了一小时,就因为输出写的.3lf,要写成.3f,黑人问号???

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <algorithm>
    #include <cmath>
    #define MAXVERTEXNUM 210
    #define INF 99999999
    using namespace std;
    
    struct Node
    {
        int x, y;
    }Stone[MAXVERTEXNUM];
    double D[MAXVERTEXNUM][MAXVERTEXNUM], dist[MAXVERTEXNUM];
    Node s, e;
    int cas;
    
    double calcDist(const Node & S1, const Node & S2)
    {
        return sqrt(double((S1.x - S2.x) * (S1.x - S2.x) + (S1.y - S2.y) * (S1.y - S2.y)));
    }
    
    void Dijkstra()
    {
        int Visited[MAXVERTEXNUM];
        memset(Visited, 0, sizeof(Visited));
    
        for (int i = 1; i < cas; ++i)
        {
            if (D[0][i])
                dist[i] = D[0][i];
            else
                dist[i] = INF;
        }
        Visited[0] = 1;
        dist[0] = 0;
    
        for (int i = 0; i < cas; ++i)
        {
            int MinDist = INF, pos;
            for (int j = 0; j < cas; ++j)
                if (!Visited[j] && dist[j] < MinDist)
                {
                    MinDist = dist[j];
                    pos = j;
                }
    
            Visited[pos] = 1;
    
            for (int j = 0; j < cas; ++j)
            {
                //松弛变形
                if (!Visited[j])
                    dist[j] = min(dist[j], max(dist[pos], D[pos][j]));
            }
        }
    }
    
    int main()
    {
    //    freopen("test.txt", "r", stdin);
        ios::sync_with_stdio(false);
        int Sc = 0;
    
        while (true)
        {
            cin >> cas;
            if (cas == 0)
                break;
    
            Sc++;
            for (int i = 0; i < cas; ++i)
                cin >> Stone[i].x >> Stone[i].y;
    
            for (int i = 0; i < cas; ++i)
                for (int j = 0; j < cas; ++j)
                    D[i][j] = D[j][i] = calcDist(Stone[i], Stone[j]);
    
            Dijkstra();
            if (Sc == 1)
                printf("Scenario #%d
    Frog Distance = %.3f
    ", Sc, dist[1]);
            else
                printf("
    Scenario #%d
    Frog Distance = %.3f
    ", Sc, dist[1]);
        }
    
        return 0;
    }
  • 相关阅读:
    Maximum Flow Exhaustion of Paths Algorithm
    ubuntu下安装java环境
    visualbox使用(二)
    vxworks一个超级奇怪的错误(parse error before `char')
    February 4th, 2018 Week 6th Sunday
    February 3rd, 2018 Week 5th Saturday
    February 2nd, 2018 Week 5th Friday
    February 1st, 2018 Week 5th Thursday
    January 31st, 2018 Week 05th Wednesday
    January 30th, 2018 Week 05th Tuesday
  • 原文地址:https://www.cnblogs.com/ducklu/p/9188670.html
Copyright © 2011-2022 走看看