滑雪_KEY

滑雪

( skiing.pas/c/cpp)

【题目描述】

MM 参加一个滑雪比赛,滑雪场是一个 N×M 的矩形, MM 要从起点( 1, 1)滑到( N,M)。矩形中每个单位格子有一个海拔高度值 hi,从一个格子走到另一个格子速度就会变成 v*2^(hi-hj),已知 MM 的初始速度是 v,请问最少需要多少时间。(从一格到另一格的路程为1,只能向四周滑雪)

【输入格式】

第一行输入三个整数 V, N, M。

接下来 N 行 M 列描述滑雪场每个单位格子的海拔高度。

【输出格式】

输出只有一行,表示从起点到终点的最少花费时间。答案保留 2 位小数。

【输入样例】

1 3 3

1 5 3

6 3 5

2 4 3

【输出样例】

29.00

【数据范围】

1<=N,M<=100

-25<=hi<=25

这是一道图论的题目,想必大家也看出来了。

但是要如何解决呢?

首先知道我们要从(1,1)点到(n,m)点,而且移动的时候是会变速的

对于每一个点,都有四个点可以滑雪,那很无疑,这就是一道最短路径问题

但对于这种移动时会变速的最短路径问题很多算法无法很好的解决

这个时候就要请我们的SPFA大爷出山了。

SPFA的队列实现方式可以很好地解决这种问题,对于每次的路径变速处理,只需要在队列中多加一个记录速度的一格就好了。

代码就不展示了。。。。

原文地址:https://www.cnblogs.com/Cptraser/p/7593467.html