栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何计算网格中两点之间的最短路径

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何计算网格中两点之间的最短路径

Lee的算法:http :
//en.wikipedia.org/wiki/Lee_algorithm

本质上是BF搜索,下面是一个示例:http : //www.oop.rwth-aachen.de/documents/oop-2007/sss-
oop-2007.pdf

例如,如果您有一个网格,其中* =障碍物,则可以向上,向下,向左和向右移动,并且从S开始并且必须转到D,并且0 =自由位置:

S 0 0 0* * 0 ** 0 0 *0 0 * ** 0 0 D

您将S放入队列,然后“扩展”它:

S 1 0 0* * 0 ** 0 0 *0 0 * ** 0 0 D

然后扩展其所有邻居:

S 1 2 0* * 0 ** 0 0 *0 0 * ** 0 0 D

和所有这些邻居的邻居:

S 1 2 3* * 3 ** 0 0 *0 0 * ** 0 0 D

依此类推,最终您将获得:

S 1 2 3* * 3 ** 5 4 *7 6 * ** 7 8 9

因此,从S到D的距离为9。运行时间为O(NM),其中N =行数,M
=列数。我认为这是在网格上实现的最简单算法,并且在实践中也非常有效。它应该比经典的dijkstra更快,尽管如果使用堆实现dijkstra可能会获胜。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/367107.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号