遍历2D数组(网格)的最佳寻路算法(JavaScript/Java/ c#)
Best pathfinding algorithm for traversing a 2D array (grid) touching some mandatory points (JavaScript/Java/C# )
我有一个2D数组,我想遍历它,从一个点开始到另一个点结束,条件如下:
- 只允许在水平和垂直方向移动
- 路径必须触及数组内的每个强制点
- 数组没有障碍物
图示:
+---+---+---+---+---+---+
| 0 | 0 | 1 | 0 | 0 | E |
+---+---+---+---+---+---+
| 0 | 1 | 1 | 0 | 1 | 0 |
+---+---+---+---+---+---+
| 0 | 0 | 0 | 0 | 0 | 0 |
+---+---+---+---+---+---+
| S | 0 | 1 | 0 | 0 | 0 |
+---+---+---+---+---+---+
从S点开始,算法应该能够找到到达E的最短路径,触及所有以"1"表示的点,并且只能水平或垂直移动。
我必须在Javascript中实现它(但即使在c#或Java中也应该很好,我想我可以翻译它:))
哪种算法最适合我的需要?我已经谷歌了很多,但发现只有一些Dijkstra或a星实现是相似的,但不同(他们不必触及强制性点…)
有人遇到过这样的问题吗?
有人能帮忙吗?
提前感谢
好的,很抱歉回复晚了。我想你可能已经得到了一些实现。如果没有,想想这个。
让我先做一个简单的版本。假设S和E在各自的列中要么是最上面的,要么是最下面的。问题的图景与此相符。
算法应该:
- 向上(向下)移动列,直到达到最大值(当前列顶部,下一列顶部)。
- 切换到下一列。下一列成为当前列。
- 向下移动列,直到达到最大值(当前列底部,下一列底部)
注意事项
- 可以按行运行算法。
- 最后一行/列需要进行不同的处理。
- 最后一行/列和第一行/列可能需要遍历两次。
- 如果S和E位于行/列中间,需要修改。
注:我记得在什么地方做过这个算法问题。如果我找到来源,我会把它贴出来。
相关文章:
- javascript扫雷器floodfill算法不能正常工作
- 算法:从数组(javascript/angular)中按当前日期获取上一个和下一个事件
- PHP或JavaScript的基本遗传算法开源代码
- 用Javascript实现算法
- JavaScript排序算法不起作用 - 任何明显的我做错了
- 需要使用JavaScript实现我的算法
- 用于计算产品价格的JavaScript构建和算法
- Vanilla Javascript算法,如何做和解释
- javascript计算价格的小算法
- JavaScript算法,提供每种可能的项目组合,并将它们存储在数组中
- 优化慢速搜索算法 - javascript,JSON和本地存储
- 分流码算法(Javascript),处理负数
- 所需算法:Javascript中可预测的随机贴图
- 用于解释整个整数而不是字符的字母数字排序算法- Javascript
- 遍历2D数组(网格)的最佳寻路算法(JavaScript/Java/ c#)
- 欧几里德算法- JavaScript
- 连续数字排列算法- Javascript
- 波特词干算法Javascript,如何
- 改进黑暗/亮度算法Javascript十六进制颜色
- 显示打开时间算法javascript