C++ 电网最小传输的最佳图算法

C++ 电网最小传输的最佳图算法,c++,graph,graph-algorithm,C++,Graph,Graph Algorithm,我有一系列的城市,每个城市都会产生一定量的电,需要一定量的电。每个城市最多有8个相邻城市,我正在努力减少换乘次数。 如果A->B能量为10,则传输的总成本为10。 如果A->B->C 10能量(A到C通过B),传输的总成本为20。 我曾想过在每个需要能量的点上使用Djikstra的,当找到足够的能量时,结束对该点的搜索,但想到了几个陷阱。 我想知道还有什么可以考虑的? 我还考虑研究弗洛伊德·沃沙尔算法和哈格鲁普算法(在维基百科上读了一些关于它们的文章,它们似乎是可行的) 谢谢一旦你有足够的能量就

我有一系列的城市,每个城市都会产生一定量的电,需要一定量的电。每个城市最多有8个相邻城市,我正在努力减少换乘次数。 如果A->B能量为10,则传输的总成本为10。 如果A->B->C 10能量(A到C通过B),传输的总成本为20。 我曾想过在每个需要能量的点上使用Djikstra的,当找到足够的能量时,结束对该点的搜索,但想到了几个陷阱。 我想知道还有什么可以考虑的? 我还考虑研究弗洛伊德·沃沙尔算法和哈格鲁普算法(在维基百科上读了一些关于它们的文章,它们似乎是可行的)


谢谢

一旦你有足够的能量就结束搜索并不能保证找到最短的路径,但是让Dijkstra为电力消耗者的每一点完全运行,根据网络的大小进行计算可能仍然是合理的。

查找A*算法它改进了dijkstra算法,使用启发式方法可能会消除一些陷阱。 我真的想不出任何其他算法


事实上,我认为A*应该没问题。

你的问题很容易就归结为一个众所周知的问题:

最小成本流问题(MCFP)是寻找最便宜的可能 通过流量网络发送一定流量的方式

这种减少可以通过以下方式完成。将虚拟“源”和“汇”顶点添加到图形中,将从源到每个原始顶点的定向边添加到该顶点的产能等于该顶点的生产率,将从每个原始顶点到汇的定向边添加到该顶点的产能等于该顶点的消耗率。根据需要设置原始边缘上的容量和成本,并解决结果网络上的最大流量最小成本问题


我也怀疑Dijkstra算法或任何最短路径算法是否有任何用处,因为它们只涉及来自某个城市的一个单位的电力的路径,并且没有考虑不同城市产生的电力的“干扰”效应。例如,如果有两个城市(A和B)产生1单位的能源,一个靠近A和B的城市(C)消耗1单位的能源,另一个远离A和B的城市(D)消耗1单位的能源,则必须将能源从A或B路由到D,但是没有最短路径算法可以提供这种功能。

您确定有足够的电源吗?你如何评估不是每个城市都能获得其“需要”的电力的解决方案?我保证有足够的电力,如果我将所有城市的“电力不足”和“剩余电力”相加,它将等于0。如果有多个顶点需要能量/可以提供能量,我将如何选择虚拟的“源”和“汇”?还是真的没有matter@AeonNeo,你不应该“选择”它们,你应该添加它们。这些将是新的顶点,仅用于将多个源问题转换为单个源。对于类似的想法,请参见,例如,@AeonNeo,或者参见这里的幻灯片3和4:Hm,这似乎应该可以实现,但我仍然有一些问题/在编码之前我无法说出,但谢谢!1) 从两个链接来看,新的源/汇节点连接到某些点,是否有任何方法可以让我选择这些点或做任何工作2)我知道从单个源到汇的最大流量将为零,从我的理解来看,从源到汇的势能转移(程序还不知道它将变为零),将解决失衡问题。这是对的吗?@AeonNeo,我的回答完全涵盖了您的第一个问题:“将源点的定向边添加到每个原始顶点,其容量等于该顶点的生产率;将每个原始顶点的定向边添加到接收器,其容量等于该顶点的消耗率。”。至于你的第二个问题,我不明白你为什么认为最大流量为零。流量不是所有生产的总和减去所有消费的总和,流量是所有生产的总和,或所有消费的总和,两者相等。