• 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;
    }
  • 相关阅读:
    Redis的介绍及安装
    SQL查询语句执行的先后顺序
    C#集合:List、Queue、Stack和Set
    C#.Net如何手写ORM
    C#集合:字典
    C#集合:ICollection和IList接口
    C#集合:Array类
    Redis在C#中的应用:String和Hash
    C#线程:排它锁
    EF Core – 7.0 New Features
  • 原文地址:https://www.cnblogs.com/ducklu/p/9188670.html
Copyright © 2020-2023  润新知