• POJ-2253.Frogger.(求每条路径中最大值的最小值,最短路变形)


      做到了这个题,感觉网上的博客是真的水,只有kuangbin大神一句话就点醒了我,所以我写这篇博客是为了让最短路的入门者尽快脱坑......

      本题思路:本题是最短路的变形,要求出最短路中的最大跳跃距离,基本思路与最短路一样,dist数组为当前点到源结点最短路的最大距离,这样的话我们知道只需要改变松弛方程就可以了,每次我们选取一个最小值dist[ k ],那么接下来我们就需要将与结点k相邻的结点都更新,如何更新呢,当然是选取之前所走路中的最大值和现在需要走的路中的值的最大值啦即dist[ j ] = max(dist[ k ], G[ k ][ j ]); 。

      好了参考代码(不建议看代码,自己上面的思路理解,就改变松弛函数即可)。

     

     1 //最短路变形:最长路中的最短路
     2 #include <iostream>
     3 #include <cstring>
     4 #include <cmath>
     5 #include <cstdio>
     6 using namespace std;
     7 
     8 const int maxn = 200 + 5;
     9 const double INF = 0x3f3f3f3f;
    10 struct Point {
    11     int x, y;
    12 } point[maxn];
    13 int n, k, Case = 0;
    14 double G[maxn][maxn], dist[maxn];
    15 bool vis[maxn];
    16 
    17 double dis(int i, int j) {
    18     return sqrt((double)(point[i].x - point[j].x) * (point[i].x - point[j].x) + (point[i].y - point[j].y) * (point[i].y - point[j].y));
    19 }
    20 
    21 double Dijkstra() {
    22     memset(vis, false, sizeof vis);
    23     for(int i = 1; i <= n; i ++)
    24         dist[i] = (i == 1 ? 0 : INF);
    25     for(int i = 1; i <= n; i ++) {
    26         double minf = INF;
    27         for(int j = 1; j <= n; j ++)
    28             if(!vis[j] && dist[j] < minf) {
    29                 minf = dist[j];
    30                 k = j;
    31             }
    32         vis[k] = true;
    33         for(int j = 1; j <= n; j ++) {
    34             if(!vis[j] && dist[j] > max(dist[k], G[k][j])) {
    35                dist[j] = max(dist[k], G[k][j]);
    36             }
    37         } 
    38     }
    39     return dist[2];
    40 }
    41 
    42 int main () {
    43     while(cin >> n && n) {
    44         for(int i = 1; i <= n; i ++)
    45             cin >> point[i].x >> point[i].y;
    46         for(int i = 1; i <= n; i ++) {
    47             for(int j = 1; j <= n; j ++)
    48                 G[i][j] = G[j][i] = dis(i, j);
    49         }
    50         printf("Scenario #%d
    Frog Distance = %.3f
    
    ", ++ Case, Dijkstra());
    51     }
    52     return 0;   
    53 }
    View Code
  • 相关阅读:
    webservice接口示例(spring+xfire+webservice)
    SoapUI 测试接口演示
    XML 文档结构必须从头至尾包含在同一个实体内
    Oracle url编码与解码
    【中山市选2010】【BZOJ2467】生成树
    synchronized与static synchronized 的差别、synchronized在JVM底层的实现原理及Java多线程锁理解
    自己动手写搜索引擎
    PopupWindow底部弹出
    JAVA集合类型(二)
    双卡手机发送短信
  • 原文地址:https://www.cnblogs.com/bianjunting/p/10687652.html
Copyright © 2020-2023  润新知