php - 求从第一列走到第n列的最短路径
PHP中文网
PHP中文网 2017-04-11 10:33:17
[PHP讨论组]
11 14 23
12 18 21
13 10 28
15 29 17
25

如上表所示。求从第一列到第n列的最短路径,行数不定,列数不定
这种情况下用什么算法比较好

可能说的不大清楚,例如有一条路径:第一列的11,第二列的10,第三列的28
那么这条路径的长度为(|10-11|)+(|28-10|)

PHP中文网
PHP中文网

认证0级讲师

全部回复(3)
PHP中文网

第一列到第n列的最短路径(两列之间的距离为差值的绝对值,例如11与14的最短距离为4,11与10的最短距离为1)


|(11 - 14 )| = 4?
|(11 - 10 | = 1;


楼主真的很抱歉不知道您在说什么。。 算第一列到第N列到最短路径?? 不能直接算嘛

大家讲道理

相临两列之间的最短路径加起来不就是1-n的最短路径之一吗,贪婪算法?

迷茫

假如 三条路的长度为 x,y,z 假如单纯的通过foreach循环可能造成复杂度为f(xy) + f(yz)

所以如和去做才能减少复杂度
第一假如我x 走 y
假设我们为两条路xy进行排序(小到大排序) 我从 x 的最小值(键值0)11开始走起,最近的可能是y的最小值10(键值0)做判断,假设y的值大于x的话,那么x10到y的最小路径就只有y0.假如比x10要小,那么我们继续往y的下一个键值判断y[1],直到找到比x10要大的数(假设为y[y3]),从中判断到底是y[y3]小,还是yy3-1.从中找到最小路径,假设找到0时候可以直接跳出循环

或者换一种思维,把所有的列的数据放到一个二维数轴,以第一列的数据作为原点,路线向两边扩散,只要哪个最短的线能连接所有列的数据,那么那路径应该是最短的

做好二位数轴之后,一眼看就知道
15,18,17
15,14,17
两种都是路径最短

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号