Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.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
Java 矩阵中的最短路径_Java_Algorithm - Fatal编程技术网

Java 矩阵中的最短路径

Java 矩阵中的最短路径,java,algorithm,Java,Algorithm,我有点困惑,我有以下模式 S...*... ....*..... **...**. .G1....*. ........ ...G2**.. ........ ....*.G3D 传说的含义如下 S = source D = Destination G = point to be visited before reaching destination . = paths * = blocked path 这种方法能给我最短的路径吗 Distance = Min((S,G1) (S,G2

我有点困惑,我有以下模式

S...*...
....*.....
**...**.
.G1....*.
........
...G2**..
........
....*.G3D
传说的含义如下

S = source 
D = Destination 
G = point to be visited before reaching destination
. = paths 
* = blocked path
这种方法能给我最短的路径吗

Distance = Min((S,G1) (S,G2) (S,G3))  
Distance = Distance + Min((G1,G2) (G1,G3))  // Assuming that G1 is shortest  
Distance = Distance + Distance(G3 , D)
G点可以随机分布,我使用BFS


不,那不行。这就是所谓的贪婪方法,它不会起作用,因为它可能会迫使你做一个糟糕的最后一步

例如,考虑以下情况:

            S                    

 G3         G1     G2               

            D
  • G1
    最接近
    S
    ,因此将首先选择它
  • 然后,
    G2
    最接近
    G1
    ,因此将选择第二个
  • 左边是G3
i、 e.您的方法将选择
G1
G2
G3
,而最佳解决方案是访问
G3
G1
,然后直线访问
G2


事实上,将问题简化为这个问题并不重要。只需将
S
D
相邻设置即可。这证明了你所描述的问题是NP难的,也就是说,你不能比穷举搜索做得更好。

你有两个图。第一个是您的模式中的图片:

S...*...
....*.....
**...**.
.G1....*.
........
...G2**..
........
....*.G3D
第二个是(无定向):


使用第一个图形查找第二个图形的边权重。然后,任务是为第二个图找到
S-*-*-*-*-D
最短路径

哪个问题的答案正确?如果我是你,动态编程+堆将是生成正确结果的好方法。@hustmphrr,你能详细说明一下吗?您是指堆数据结构吗?@aioobe是的。事实上我说的是一个算法。堆作为一种快速的数据结构,可以提取最“可能”的路径。该问题可以转换为NP完全的TSP,因此在一个非平凡的问题实例中不可能找到最佳解决方案。而GIs是一个近似解决方案ok,或者它必须是最佳的吗?除非你能利用地图的一些聪明技巧,否则我相信你必须考虑GS的所有可能排列。第一行
Min((S,G1)(S,G2)(S,G3))
要求我们首先计算所有三个距离。因此,不要在这一步之后选择min,而是对每个可能的
(S,Gi)
@MicahSmith执行第二步和第三步,您能进一步阐述一下吗?如果他的算法选择去G1,那么为什么在那之后S和G1之间的距离会有趣呢?找到最短的
S-*-*-*-*-D
需要探索所有可能的解决方案。随着高达15克,有多达1307674368000替代品。@aioobe,毫无疑问。但这些任务和最初的任务是相等的,这是肯定的。
S-G1
S-G2
S-G3
S-D
...
G2-G3
G2-D