面试找出最短路径

2018-06-27 19:49:28 +08:00
 Jhonson

题目描述如图链接

题目大意就是给定一个 n x m 的矩阵,矩阵只含 0 或者 1,其中 0 代表连通,1 代表阻断,给定任意矩阵内两点 A B 坐标,要求找出 A->B 的最短路径(假设是可达的),大家有什么好的思路吗,多多益善,谢谢了。(如果描述不清楚,还请提出。)

Talk is cheap,show your code!

10298 次点击
所在节点    程序员
75 条回复
classyk
2018-06-27 19:51:22 +08:00
这个不就是 Astar 算法吗
baiihcy
2018-06-27 19:55:16 +08:00
BFS 就能实现了吧
Jhonson
2018-06-27 19:56:01 +08:00
@classyk 谢谢你,这个图算法真有意思,我在看相关资料了!
Jhonson
2018-06-27 19:56:21 +08:00
@baiihcy 应该是没有问题的,BFS 和 DFS 感觉是万能的呀- -
LawlietZ
2018-06-27 20:08:42 +08:00
裸 dijksta 啊 超级简单。。。哪个公司的面试啊。。。
ayyll
2018-06-27 20:08:51 +08:00
@baiihcy bfs 解单源最短路吧。。他这任意两点 明显是多源 bfs 确定不会被询问哭? 所以 Floyd 吧
ayyll
2018-06-27 20:11:21 +08:00
@LawlietZ 难道不是裸 Floyd。。。任意两点 dij 是一点到任意点吧。。
cbais7890
2018-06-27 20:27:49 +08:00
takato
2018-06-27 20:37:06 +08:00
@classyk

@Jhonson

A*无法保证全局最优
Linxing
2018-06-27 20:48:57 +08:00
@cbais7890 感谢 很形象
Parallel
2018-06-27 20:52:08 +08:00
题目描述的表示图的方式叫,邻接矩阵。针对这个题目,对应不同的查询需求,可以扯的有很多。
以下,n 为顶点数,e 为边数。
O(n^3) Floyd
O(n^2) Dijkstra
O(n*e) Bellman-ford
O(e) SPFA
ballshapesdsd
2018-06-27 20:53:09 +08:00
你们都审题了没有啊,怎么迪杰斯特拉都出来了
LawlietZ
2018-06-27 20:59:40 +08:00
@ayyll 我觉得是表述问题,一般不会深问多源最短路
Parallel
2018-06-27 21:00:57 +08:00
@ballshapesdsd 哦,点开链接才看到完整的题目,理解题目有误。
LawlietZ
2018-06-27 21:02:41 +08:00
@Parallel SPFA 是 ke,常数 k 不能省略
takato
2018-06-27 21:07:09 +08:00
@ballshapesdsd 似乎好多人理解成了邻接矩阵。。。
其实是张迷宫图。。。
wannafly
2018-06-27 21:27:27 +08:00
@takato 当然可以。取决于你的 heuristic function 怎么取,比如退化成最简单的迷宫算法。
HiJ2017
2018-06-27 21:38:25 +08:00
这是很经典的数据结构题,当时教材上给了 BFS 和 DFS 两种解法
<数据结构教程>--李春葆
takato
2018-06-27 21:40:11 +08:00
@wannafly A×这个优化是要建立在去掉“最”的情况下的,即如果你只要一个局部最优。
takato
2018-06-27 21:40:45 +08:00
@wannafly fix "A*"..被输入法替换了符号。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/466369

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX