我有点困惑,我有以下模式
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
答案 0 :(得分:1)
没有。那不行。这就是所谓的贪心方法,它不起作用,因为它可能会迫使你做一个糟糕的最后一步。
例如考虑这种情况:
S
G3 G1 G2
D
G1
最接近S
,因此将首先选择。G2
最接近G1
,因此将选择第二个G3
即。您的方法将选择G1
,G2
,G3
,而最佳解决方案是直线访问G3
,G1
然后G2
。
事实上,将traveling salesman problem减少到这个问题是微不足道的。只需将S
和D
设置为彼此相邻即可。这证明你所描述的问题是NP难的,即你做得比穷举搜索更好。
答案 1 :(得分:0)
你有两张图。首先是您的架构上的图片:
S...*...
....*.....
**...**.
.G1....*.
........
...G2**..
........
....*.G3D
第二个是(无定向的):
S-G1
S-G2
S-G3
S-D
...
G2-G3
G2-D
使用第一个图表查找第二个边缘权重。然后任务是为第二个图找到S-*-*-*-D
最短路径!