滑雪 ( 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的队列实现方式可以很好地解决这种问题,对于每次的路径变速处理,只需要在队列中多加一个记录速度的一格就好了。 代码就不展示了。。。。 有疑留评