加权二维阵列中围绕目标的最短路径

问题描述

我很难找到正确的编码方法。

取一个随机生成的2d数组,大约50x50,每个像元的值为1〜99。 从一个随机位置“绿色”开始,目标是以最少的操作量包围目标“红色”。
移至相邻的单元格需要1〜99个动作,具体取决于其值。
低值的小数组示例:

[

目前我最好的主意是,根据目标的对角线生成4组检查点,然后使用大量的Dijkstra查找通过所有检查点的路径以及起点。

我遇到的一个问题是,这很快就会变成大量的路径。
从“ NorthWest-1到NW-20”的任何起点到“ NE-1到NE-20”的任何终点,都有400种可能性。将第三个对角线和第四个对角线相加会变成400 * 20 * 20。

使用对角线检查点的另一个问题不是[绿色到对角线的最短路径(橙色路径)]

[

而是从“绿色到红色周围路径上的任何点”。

当前伪代码;

take 2 sets of diagonals nearest to Green/start
find the shortest path that connects those diagonals while going through Green
(backtracking through the path is free)

draw a line starting from the target point,in-between the 2 connected diagonals,set those cells to value infinite to force going around them (and thus around the target)

find the shortest path connecting the now-seperated diagonals

不幸的是,该伪代码已经包含了一些边缘情况,其中“墙”阻止了最有效的路径。

如果相关,将使用javascript编写。

编辑,作为一种极端情况,它可以在包围之前使目标旋转,尽管极为罕见

https://wiki.termux.com/wiki/Differences_from_Linux

Edit2; “环绕”是指将目标与视野的其余部分断开连接,而不管包围区域有多大,或者即使它包括起点(例如,所有边都为0)

这是另一个具有(可能)最佳路径的较大字段,并且以文本形式包含2个字段:

enter image description here


https://i.imgur.com/yMA14sS.png

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)