矩阵中的最短路径

时间:2014-08-20 14:14:37

标签: 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,G3))  
Distance = Distance + Min((G1,G2) (G1,G3))  // Assuming that G1 is shortest  
Distance = Distance + Distance(G3 , D)

G点可以随机分布,我正在使用BFS

G <15且矩阵<= 100×100

2 个答案:

答案 0 :(得分:1)

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

例如考虑这种情况:

            S                    

 G3         G1     G2               

            D
  • G1最接近S,因此将首先选择。
  • G2最接近G1,因此将选择第二个
  • 左边是G3

即。您的方法将选择G1G2G3,而最佳解决方案是直线访问G3G1然后G2

事实上,将traveling salesman problem减少到这个问题是微不足道的。只需将SD设置为彼此相邻即可。这证明你所描述的问题是NP难的,即你做得比穷举搜索更好。

答案 1 :(得分:0)

你有两张图。首先是您的架构上的图片:

S...*...
....*.....
**...**.
.G1....*.
........
...G2**..
........
....*.G3D

第二个是(无定向的):

S-G1
S-G2
S-G3
S-D
...
G2-G3
G2-D

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