获得所有可能路径和特殊细节的有效方法

问题描述

| 我面临着寻路问题,其中我必须找到从一个点到另一个点的所有可能路径。如果仅仅是那样,那将是非常容易的-我将使用广度优先算法,就像这里解释的那样。 问题在于,在这种情况下,每个边缘都有可以使用的最大次数。让我们看一个例子: 在这种情况下,我可以从A到D进行15次。前10次,路径为A-> B-> C->D。其余5次,路径为A-> C-> D 。 到目前为止,我已经能够实现解决方案(使用python),但是对于中等问题(大约30个节点)来说,它的速度相当慢。我有一个不加权的图(因为我不介意路径的长度),其中包含不同节点之间的可能连接,另外,我有一个矩阵,每个边的使用限制。 因此,在循环中: 我找到一条可能的路径。 我更新用法矩阵。该路径的使用量将是边缘的最小使用量(例如,您可以使用具有最小限制的路径多次使用该路径)。 对于使用率达到0的每个边,这意味着它不再可用,因此我将其从图中删除。 循环直到找到所有路径。 就像我说的那样,这行得通,但是速度很慢。通过根据每个节点可以使用的次数对边缘列表进行排序,我已经能够提高整体性能,但是它仍然很慢。 有什么线索吗?     

解决方法

        您可以将问题表示为最大流量问题。与其说您可以将A到B行驶10次,不如说A到B的流量为10 m ^ 3 / s。您的图形是一个管道网络,可能从A到D的总流量为15m ^ 3 / s。因此,您可以从维基百科上列出的算法开始。 我对您的问题有些不清楚的地方。根据您的答案,它可能不符合流程问题。 如果将A到C的容量增加到6,则从A到D的最大流量仍然是15,但是有几种方法可以实现这一点(将6到C分别直接通过B和5或10)。您对这些答案中的任何一个感到满意还是全部想要它们?本着同样的精神,如果存在从A到C的另一条路径(例如通过节点E),您会接受它在结果中被忽略,因为C到D仍然是饱和的。 如果图中存在一个循环(例如,从C到B的边),您将不认为通过此循环永远不会,不会,不会两次或两次以上是不同的解决方案。