最短路Subway POJ - 2502

Posted streamazure

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最短路Subway POJ - 2502相关的知识,希望对你有一定的参考价值。

Subway POJ - 2502

题意:

给定家与学校的坐标,以及若干条地铁路线各站点的坐标,还有人的速度与地铁的速度。一到达站点就可以立刻上车,不同地铁路线之间可以随意换乘。问从家到学校花费的最小时间。

思路:

懒鬼宗旨:能写floyd绝对不写dijkstra和SPFA……

唯一要注意的是,本题中所有节点两两之间都是可以走路抵达的,不存在不可抵达的情况。而同一条路线的地铁站之间花费的时间一定比走路少,所以遍历时取最小值即可。

double d[maxn][maxn];
int n;
const double hv = 10000.0;
const double sv = 40000.0;

struct node {
    int x, y;
}N[maxn];

double count(node t1,node t2) {
    int x1 = t1.x, y1 = t1.y, x2 = t2.x, y2 = t2.y;
    double p = x1 - x2, q = y1 - y2;
    p *= p; q *= q;
    return sqrt(p + q);
}

void floyd() {
    for (int k = 1; k <= n; k++) {
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= n; j++) {
                d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
            }
        }
    }
}

int main()
{
    // ios::sync_with_stdio(false);
   // int t; cin >> t; while (t--) {
    n = 0;
    for (int i = 0; i < maxn; i++) {
        for (int j = 0; j < maxn; j++) {
            d[i][j] = 1000000;
        }
    }
    node h, s, temp;
    cin >> h.x >> h.y >> s.x >> s.y;
    N[++n] = h;//1是家
    N[++n] = s;//2是学校
    int px = -1, py = -1;
    while (cin >> temp.x >> temp.y) {
        if (temp.x == -1 && temp.y == -1) {
            px = py = -1;
            continue;
        }
        N[++n] = temp;
        if (px == -1 && py == -1){
            px = temp.x; py = temp.y;
            continue;
        }
        else {
            double dis = count(N[n-1],N[n]) / sv;
            d[n - 1][n] = d[n][n - 1] = dis;
            px = temp.x; py = temp.y;
        }
    }
    //注意所有点两两之间都是可以走路过去的
    //因为地铁站之间花费的时间一定比走路快,遍历所有点时取最小值即可
    for (int i = 1; i <= n; i++) {
        d[i][i] = 0;
        for (int j = i + 1; j <= n; j++) {
            d[i][j] = d[j][i] = min(count(N[i],N[j]) / hv, d[i][j]);
        }
    }

    floyd();
    cout << int(d[1][2]*60 + 0.5);
 //   }
    return 0;
}

以上是关于最短路Subway POJ - 2502的主要内容,如果未能解决你的问题,请参考以下文章

Subway---poj2502(最短路)

POJ 2502 Subway-经过预处理的最短路

最短路Subway POJ - 2502

Subway POJ - 2502 最短路

POJ 2502 Subway ( 最短路 && 最短路建图 )

POJ - 2502 Subway