如何在带有加权节点和顶点的图中找到最佳路径

时间:2012-03-17 18:06:45

标签: java graph graph-algorithm shortest-path

假设我有这张图

example graph

  • 始终是完整的图表
  • 一个起始节点 - 也就是结束节点
  • 加权节点和顶点

我想找到一条尽可能短的路径但是得分最高(节点的总和) - 换句话说,一条路径不能超过一些定义的常数,但给我最好的分数。我想在同一个节点中启动和停止,并且不想访问已经访问过的节点。

是否有任何算法可以帮助我解决这个问题,或者您有任何想法如何解决它?

哦,而且不是作业,我只是想创建一个特殊的路径查找器。

修改

到目前为止,我已经能够构建一个可以在几秒钟内找到路径的工作算法。但是我没有得到我想要的分数 - 我只获得了大约85%的分数。如果我改变算法的参数,那么时间将是几个小时甚至更长......

2 个答案:

答案 0 :(得分:1)

我不认为这比蛮力时间更好。您可以计算所有路径,直到达到某个约束长度。但是,对于一个非常慢的任意大图。如果你正在寻找一个可靠的猜测,我将从一个贪婪的算法开始,该算法选择具有最高每长度点数值的步骤,直到达到极限。然后,您可以在过早填充的情况下添加诸如倒车之类的东西(例如,如果您已经过了5,但是您的限制是6,并且您当前的节点没有连接长度的路径)以找出其工作方式。< / p>

答案 1 :(得分:0)

我不确定这是否真的有效,但这些是我最初的想法:

也许尝试使用最大生成树(Prim或Kruskal)。由于您不想重复顶点,因此您的路径最终必须是cycle图形。走生成树(可能是某种贪婪的算法?),一旦你点击一个叶子,回到起始顶点(因为原始图是完整的图)。如果没有负边缘权重,这只会起作用(可能)。

现在只是一些想法 - 这是深夜,我会在早上仔细看看。 :)