UVA929 Number Maze 题解
思路
简单看一下题目,可以理解为在网格上寻找从点 \((1,\,1)\) 到点 \((n,\,m)\) 的最短路,其中权值为点权。
我们可以考虑直接使用 Dijkstra 算法在网格上跑一遍最短路算法,求得答案。下面简述一下 Dijkstra 算法的过程:
创建一个大小与顶点数量相等的数组 \(f\),用于存储起始点到各个顶点的当前最短距离估计值。
将起始点的距离值设置为起始点的点权,其他点的距离值设置为无穷大(或一个足够大的值)。
将起始点加入优先队列,按照距离值从小到大进行排序。
重复以下步骤直到优先队列为空:
- 弹出队首元素,表示当前最短路径已确定。
- 遍历队首元素的所有邻接网格,如果通过对首到达邻居的距离比当前记录的距离更短,则更新邻居的距离值。
- 如果值更新了,那么将邻居其加入队列。
最终得到的 \(f\) 数组即为起始点到各个点的最短距离。
这样就可以轻松的通过本题啦!
代码
1 |
|
“觉得不错的话,给点打赏吧 (✿◕‿◕✿)”

微信支付

支付宝支付 (暂不支持)
UVA929 Number Maze 题解
https://lixuannan.github.io/posts/7177.html