面试找出最短路径

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!

10532 次点击
所在节点    程序员
75 条回复
greenmoon55
2018-06-28 08:18:02 +08:00
lc 675
shiyouming91
2018-06-28 08:25:41 +08:00
BFS+DP,用另一个同样大矩阵保存到达某个点的已知最少的步数,BFS 的每一步检查新矩阵中当前的位置是不是记录了更小或相等的步数。如果是就不再展开这个位置了,否则记录步数到这个位置。空间复杂度是 m*n+BFS 用的栈,我直觉觉得栈肯定比 m*n 小,可以忽略。时间复杂度没分析过,不够一般情况下不会太差。我的直觉是因为 BFS 的初期很容易剪掉相邻的分支,应该是 m*n 或者最多是 m*n*log(m*n)级别的

应该不是最快的解法,不过可扩展性很强,因为很容易处理经过每格格子的开销不一样的情况,以及类似战棋游戏里的移动力有限想知道哪些点是可达的情况,各种涂色的问题等等

总之在十年前之后的硬件条件下我会无脑用这种解法
p1094358629
2018-06-28 08:31:53 +08:00
我连题目都看不懂。。。A 为啥是 1,0 按照 XY 坐标不应该是 0,1 吗???
yxcoder
2018-06-28 08:48:32 +08:00
相对较短其实就算可以的了,最短的收益感觉不大
yxcoder
2018-06-28 08:49:08 +08:00
@yxcoder 刚刚发出去就发现理解错误了,尴尬
yylucifer
2018-06-28 09:12:13 +08:00
基本算法都不熟悉,还甩:Talk is cheap, show your code!
Jhonson
2018-06-28 09:17:26 +08:00
@yylucifer 哈哈哈,这不学着网上的用语的嘛,要是冒犯到你了,我给你道歉~
takato
2018-06-28 09:42:33 +08:00
@wannafly 可是不能保证该函数是凸函数呀。
mbtfdwlx
2018-06-28 09:46:56 +08:00
如果两点之间权值都是定值 用 BFS 就可以了, 有权值的情况下 就可以考虑 Dijkstra SPFA A-star 都可以
q397064399
2018-06-28 09:49:16 +08:00
@Jhonson #47
@yylucifer #46

你还不让人家装个逼过过瘾,大家都是在网上,装一装无所谓的。
hisune
2018-06-28 09:58:05 +08:00
ioth
2018-06-28 09:58:49 +08:00
学校的题目用来面试,这公司技术了得。
kzzhr
2018-06-28 10:09:59 +08:00
都用矩阵存了,这不是 floyd 的标准模板么
jetyang
2018-06-28 10:41:16 +08:00
游戏里常用的算法,英雄 A 怎么走可以最快的攻击到英雄 B
stargazer
2018-06-28 12:06:42 +08:00
话说想起在爱奇艺面试的时候非让我手写出全部代码。。。。还是自己太渣。。。。
Jhonson
2018-06-28 12:29:31 +08:00
@stargazer 你最终写出来了吗那,我当时是说出了利用距离来定夺,但是我只考虑了距离终点的距离,没有考虑起点,还用的是欧氏距离,最终啥都没写出来。
Jhonson
2018-06-28 12:30:09 +08:00
@takato 真的没有办法全局最优吗,那只有靠搜索算法来更新的方法最靠谱了呀
loryyang
2018-06-28 13:09:54 +08:00
首先想到的就是 BFS 打表,从 A 开始,一直广度搜索打表,更新步长,一直到接触到 B 就结束了
Solarest
2018-06-28 13:19:07 +08:00
Floyd 吧
yuriko
2018-06-28 13:53:46 +08:00
面试的话,能知道是广搜就行了吧……
就是试探你有没有基本的算法基础……

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

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

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

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

© 2021 V2EX