1321. Robot

来源:互联网 发布:ummy mac 编辑:程序博客网 时间:2024/06/08 20:06

TAG 最短路

 

把格按上下左右的连通性转换成图,即格子为顶点,边 (a,b) 的权值为格子b的花费。再用普通的 Dijkstra 算法就可以直接解。

 

不过这里顶点最多n=10000个,普通的 Dijkstra 算法是O(n^2) 效率太低了。可以用堆优化。

因为在 Dijkstra 处理时候,有3种节点

  1. 已检查的节点。(升序)
  2. 候选节点。
  3. 未处理节点。

我们每次需要从2中选出路径最短的节点进行检查,然后更新2和3中的路径值,把部分3加到2。普通的遍历找最小值需要O(n),显然遍历的次数很多,所以可以用堆优化。

这里有一点比较特殊,就是到达同一个格的花费都是一样的,所以不需要更新节点路径长度值(我们已按升序检查节点)。

 

程序中我是用priority_queue实现的,0.02 sec308 KB

效率还不错。。能排在status第一页

贴源码:

原创粉丝点击