Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm python中关键路径的变化_Algorithm_Sorting_Python 2.7_Pygraph - Fatal编程技术网

Algorithm python中关键路径的变化

Algorithm python中关键路径的变化,algorithm,sorting,python-2.7,pygraph,Algorithm,Sorting,Python 2.7,Pygraph,我正在寻找一种方法,以最低的成本确定连接地图上不同坐标的路径。这些坐标表示管网的用户和一个供应商 我第一次搜索stack overflow的GIS部分是为了进行最小成本路径分析,但这不是我需要的(我没有找到一种算法,它只允许有一个起点和终点)。我有一个算法可以确定所有不同坐标之间的最低成本路径,但现在我想对这些数据进行一种关键路径分析。但是,在最终解决方案中必须处理所有坐标,并且不重要的是,除了供应商之外,哪个坐标优先 有人能帮我吗 提前谢谢 示例 好的,主要问题是: 我会有这样一个矩阵:

我正在寻找一种方法,以最低的成本确定连接地图上不同坐标的路径。这些坐标表示管网的用户和一个供应商

我第一次搜索stack overflow的GIS部分是为了进行最小成本路径分析,但这不是我需要的(我没有找到一种算法,它只允许有一个起点和终点)。我有一个算法可以确定所有不同坐标之间的最低成本路径,但现在我想对这些数据进行一种关键路径分析。但是,在最终解决方案中必须处理所有坐标,并且不重要的是,除了供应商之外,哪个坐标优先

有人能帮我吗

提前谢谢

示例

好的,主要问题是:

我会有这样一个矩阵:

  A  B  C  D

A x  3  4  2

B 3  x  7  5

C 4  7  x  9

D 2  5  9  x
在这个矩阵中,A、B、C和D将代表地图上的一个位置(仅通过X和Y坐标),数字是A和B之间连接的价格(例如:这些成本基于我所拥有的数据)。我的目标是以最便宜的方式将所有这些点连接起来

为了做到这一点,我考虑了一个关键路径分析(您可能从业务类中了解到),但显然这不起作用,因为这些算法没有编写成包含所有位置的路径。但我需要连接所有(4)个节点,但要以最便宜的方式

例如:当我以A为起点时,我需要这一点来产生:

连接A-D-B-C(这将花费2+5+7=14)

而不是

ABCD=19

ACBD=16

ADCB=18

ABDC=17


ACDB=18

您描述的问题是邮递员的问题,不知道哪一个是起点。从你的问题来看,我相信你的图是没有方向的,因此从A到B的距离与从B到A的距离是一致的。在这种情况下,你可以通过迭代所有点的组合并计算总距离(即路径中距离的总和)来解决你的问题。最小值就是问题的解决方案

您可以阅读有关生成组合的更多信息。但不要提前生成它们,这不利于内存管理,只需始终计算下一个组合,测量其总距离,并将其与最小值进行比较。如果其小于最小值,则将最小距离修改为新的最小值,并将组合存储到一个数组中,该数组将在末尾包含最佳路径。如果您的图形是无向的,并且所有节点对都有一个顶点,那么这就是答案的结尾

如果我错了,你的图是有方向的,那么生成所有的组合是不够的,你需要生成所有的变体


请注意,如果出于某种原因,可能会出现节点对不一定具有垂直性的情况。在这种情况下,您需要生成所有有效的变体,其中valid意味着相邻的两个节点有一个顶点。

我不理解这个问题。你能重新表述一下吗?一般来说,你可以使用Dijsktra算法,在这里你可以应用几何模型中使用的距离,如果需要,可以根据你的需要修改算法。我不理解你的确切问题,因此,除非你重新表述你的问题(你可以通过点击帖子标签下方的编辑按钮来完成),否则我只能为你做这些。我在问题框架中举了一个例子。希望这能让事情变得更清楚。