矩阵中N个检查点通过两点之间的最短路径

纳文·普拉沙斯(Navin Prashath)

如何在矩阵中找到两个点之间的最短路径,即S和D?它应该通过多个名为&的检查点。它不能通过G。*表示打开的门。路径可以多次通过目的地和检查点。

例子:

GGGGG
GS**G  
GGDGG  
G**&G  
GGGGG

此矩阵的输出应为6。

内森(Nathan S.)

当您只有一个要访问的航路点时,问题很容易解决。您找到到达航点的路径(例如,使用A *),然后找到从航点到目标的路径。

当航路点数量增加时,问题将成倍增加,因为您必须考虑接下来访问任何航路点。这就是旅行商问题

通用方法是通过选择下一个看起来最佳的航路点来近似最短的解决方案,或者通过尝试所有可能性来找到最佳解决方案。(上面链接的Wikipedia页面对此进行了介绍。)

但是,您需要对这些进行自己的研究-远远超出我们可以在此处为您提供帮助的范围。

下一步是选择一种实施方法。如果您不了解它,则可以具体询问该方法的某些方面是如何工作的。但是,完整的解决方案很复杂,因此,对于这样一个一般性的问题,您不会获得太多的编码帮助。


对于最佳解决方案,最好的选择是深度优先的分支定界搜索。这是一个采用修剪的深度优先搜索-消除了迄今为止可能比您最好的解决方案更糟糕的路径。您可以在很多页面上找到有关该算法的信息,包括这一页,但是如果您对如何实现特定算法有疑问,则应该开始研究该算法,然后再提出一个新的问题。

你的问题是如何做到这一点已经被这里的问题都在你自己的问题的细节相同水平的回答。没有人会在这里为您发布完整的源代码解决方案,因为这听起来像是一个课堂作业。当您开始实施某项工作并陷入困境时,请随时提出另一个问题,确切地说明使您陷入困境的是什么。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章