Algorithm 如何在多路径图中找到最短路径

Algorithm 如何在多路径图中找到最短路径,algorithm,graph,collision,shortest-path,graph-traversal,Algorithm,Graph,Collision,Shortest Path,Graph Traversal,考虑一个有V个顶点和n条路线(汽车)的图。每条路径(car)从一个顶点开始,只穿过V顶点一次(每条路线中没有任何回路) 在每次迭代(即时间)中,每个顶点中只能有一条路线(汽车)(车辆之间无碰撞)。如果不可行(两辆车相互碰撞),则路线(车)会在迭代中停留在其顶点(车在该顶点上等待)。我们如何才能找到所有路线(汽车)可以穿过图形的最小循环数 例如: 在本例中,有5个顶点:蓝色、黑色、紫色、橙色、绿色 第一条路线是:蓝色、黑色、绿色、紫色、橙色(绿线) 第二条路线是:绿色、橙色、黑色、紫色、蓝色(黑

考虑一个有V个顶点和n条路线(汽车)的图。每条路径(car)从一个顶点开始,只穿过V顶点一次(每条路线中没有任何回路)

在每次迭代(即时间)中,每个顶点中只能有一条路线(汽车)(车辆之间无碰撞)。如果不可行(两辆车相互碰撞),则路线(车)会在迭代中停留在其顶点(车在该顶点上等待)。我们如何才能找到所有路线(汽车)可以穿过图形的最小循环数

例如:

在本例中,有5个顶点:蓝色、黑色、紫色、橙色、绿色 第一条路线是:蓝色、黑色、绿色、紫色、橙色(绿线) 第二条路线是:绿色、橙色、黑色、紫色、蓝色(黑线)

最少迭代次数:5次

第一条路线是:蓝、黑、绿、等、紫、橙(绿线)

第二条路线是:绿色,橙色,黑色,紫色,蓝色,等等(黑线)

在本例中,第一辆车等待迭代#4,以禁止与紫色顶点上的第二辆车发生碰撞

您可以使用。在该算法解决的问题中,一个节点将表示所有车辆的可能状态。因此,起始节点表示车辆的初始状态,目标节点表示所有车辆在其目的地的状态

A*通过最小化以下函数来选择下一个节点n:

f(n)=g(n)+h(n)

如果没有可能的冲突,将只有一个节点N添加到节点的集合中去考虑,但是如果有冲突要避免,将有选择(即不同的节点)来选择,每次都有一组不同的汽车必须等待。 g(n)是该特定节点的迭代次数。重要的是要认识到,在这个算法中,要考虑的节点集未必都在同一个迭代中。 h(n)是一个启发式函数。就这个问题而言,h(n)应该是,因此我们可以将它定义为每辆车到达目的地仍然需要(无碰撞)的迭代次数的最大值。h(n)给出了一个乐观的迭代计数,因为它假设不会有进一步的冲突需要处理

与使用*时一样,您需要一个优先级队列(如最小堆)来存储节点。它只从起始节点开始。然后从它生成每个邻居节点(下一次迭代),并推送到堆中。如前所述,如果没有冲突,则只有一个邻居节点要推送。然而,如果每辆车的一次轻微移动都会导致一次或多次碰撞,那么可以考虑将几个邻居推到堆中。然后从堆中弹出一个节点,进程继续


当一个节点被推送到堆中时,应该向其添加一个附加信息:到达该节点的迭代次数。这是该节点的g(n)值。当到达目标节点时,这将是返回的解决方案。

通常不接受指向非现场描述的链接。