Algorithm 如何在至少通过一次特定节点的条件下找到最便宜的遍历路径
我有一个问题,听起来像这样:Algorithm 如何在至少通过一次特定节点的条件下找到最便宜的遍历路径,algorithm,graph,graph-theory,dijkstra,Algorithm,Graph,Graph Theory,Dijkstra,我有一个问题,听起来像这样: 你在一个危险的森林里。你走的每一条路在每次使用时都有一定的风险。(具有计算边的无方向图)。你的任务是从宝藏洞的入口进入,然后从出口逃走(在与入口不同的地方) 为此,我假设我需要使用Dijkstra算法来寻找从A(起点)到B,然后从B(终点)到C(出口)的最便宜路径 第二个问题是我不知道怎么做 考虑同样的问题,但是有5颗宝石散布在森林的十字路口(节点),并且有一只致命的狼在睡觉,如果你在杀死他之前收集宝石,他会杀死你。在离开森林之前,你必须收集所有5个 我不知道如何将
我是否必须对访问节点的所有顺序进行排列,并针对要收集的每个不同的gem顺序迭代运行Dijsktra?还是有更好的办法?还有什么我应该注意的吗?让我们忽略wolf这个事实,因为您知道如何处理它,并重新制定问题,以便更加关注:您有一个包含源和目标的图形,并且必须访问其他五个节点(称为gems) 因此,首先要做的是从源和gems运行SSSP算法(比如Dijkstra),这样,源、每个gem和目标之间的距离就最小了
通过这种方式,您可以看到一个新的完全连接的图形,其中源、目标和gem是节点,先前计算的距离是边的权重。在该图中,您必须使用起始节点和结束节点来探索每个节点。我认为这是旅行推销员问题的一个特殊版本,但您只有7个节点,因此您可以尝试所有可能性我将进行以下建模:
如果你能提供一张测试图表就好了。这是在线评委的练习吗?你能发布链接以便我们验证我们的答案吗?问题实例的大小有哪些限制?这是一个问题,但遗憾的是它是私有的,需要登录,我无法提供。这也是问题的编辑版本,只描述了问题的重要部分。这听起来很正确。你的意思是通过运行Dijkstra的算法找到所有节点之间的最短路径,并允许各个实例“在中间相遇”,然后尝试各种可能的排列,看看哪个顺序访问它们最便宜?@JackAvante是的,我正是这么说的