Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于遍历与某些必需点(JavaScript/Java/C#)接触的2D数组(网格)的最佳寻路算法_C#_Java_Javascript_Path Finding_Dijkstra - Fatal编程技术网

用于遍历与某些必需点(JavaScript/Java/C#)接触的2D数组(网格)的最佳寻路算法

用于遍历与某些必需点(JavaScript/Java/C#)接触的2D数组(网格)的最佳寻路算法,c#,java,javascript,path-finding,dijkstra,C#,Java,Javascript,Path Finding,Dijkstra,我有一个二维数组,我希望通过以下约束从一个点开始遍历到另一个点结束: 只允许在水平和垂直方向上移动 路径必须接触阵列内的每个强制点 阵列没有障碍物 这是一个图形表示: +---+---+---+---+---+---+ | 0 | 0 | 1 | 0 | 0 | E | +---+---+---+---+---+---+ | 0 | 1 | 1 | 0 | 1 | 0 | +---+---+---+---+---+---+ | 0 | 0 | 0 | 0 | 0 | 0 | +---+---

我有一个二维数组,我希望通过以下约束从一个点开始遍历到另一个点结束:

  • 只允许在水平和垂直方向上移动
  • 路径必须接触阵列内的每个强制点
  • 阵列没有障碍物
这是一个图形表示:

+---+---+---+---+---+---+
| 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 star实现(它们不必触及强制点…)

有人经历过这样的问题吗

有人能帮忙吗


提前谢谢你

好的,很抱歉回复晚了。我想你可能已经得到了一些实现。如果没有,请考虑一下

让我先做一个简单的版本。让我们假设S和E在各自的列中要么是最上面的,要么是最下面的。所讨论的问题图片符合这一点

算法应:

  • 向上(向下)移动柱,直到达到最大值(当前柱顶,下一柱顶)
  • 转换到下一列。下一列将成为当前列
  • 向下移动列,直到达到最大值(当前列底部,下一列底部)
  • 要考虑的事项

  • 您可以在行上运行算法
  • 最后一行/列需要以不同方式处理
  • 最后一行/列和第一行/列可能需要遍历两次
  • 如果S和E位于行/列的中间,则需要修改
    另外,我记得在什么地方做过这个算法问题。如果我找到什么地方,我会把消息来源发出去

    S和E是固定的吗?比如S是左下角,E是右上角?就像S和E总是相对的角?不,它们不是固定的,但它们总是在边界列上,并且彼此相对,我的意思是如果S在最左边的列中,E在最右边,反之亦然。但是,如果你有一个相反的角落的解决方案,可以自由分享:你是否考虑使用回溯算法?谢谢Gamb,我不知道回溯算法,你知道我在哪里可以找到一些例子吗?