如何编写此图相关算法

时间:2013-07-29 05:10:43

标签: c algorithm graph

所以假设你有一列火车和10.000(0 ... 9999)站。火车在0号站。

每个车站都有一些货物可以运送到任何其他车站。交付给其他站的货物量是随机的:每站1~100吨。

您的火车一次最多只能载50吨。一旦火车在任何火车站上取货,它必须先将货物卸下,然后才能拿起下一批货物(即如果当前时刻火车载重1吨,即使它有49吨的空间,也不能捡到更多的货物)。

因此,开发算法火车将在最短的时间内交付所有货物。

1 个答案:

答案 0 :(得分:0)

这是我第一次快速思考这个问题,如果我想到更好的回答,我会回来编辑我的答案。其他人也许可以拿走我提供的东西并帮助你。这是“蛮力”的方法,可能有更好的方法来解决这个问题。

  1. 枚举所有原点/目的地对(看起来像是一个输入。) - 10,000次操作。 对于需要比列车所能提供的容量更多的站点,将这些站点分成额外的起点/目的地对。
  2. 枚举原点/目的地对的所有排列 - 10,000!操作(n * n复杂度) - 在循环内部,不保存每个 之一。
  3. 对于每个排列,计算列车行驶的总距离。对于每对,这将是先前的距离驱动 加上火车到起点+火车到目的地。对排列中的所有对执行此操作。相比 这个单值是你之前的单一值。 如果它更小,请保留这个和排列的字符串。 如果你换一个新的排列,就丢掉你以前的一串排列。这应该是 10,000 * c(1?)操作。如果,只保存其中一个排列 你保存所有这些,如果你这样做,你将耗尽内存。我想。
  4. 我认为这种复杂性将是AROUND n + n * n + n = 2n + n ^ 2。这应该适用于10,000个站点。小心记忆,当我最初开始写这篇文章的时候,我想要保存所有可能需要20,000的排列!在记忆中。

    抱歉,我使用的是美国的方式,而不是。对于成千上万的地方分隔符。

    希望这有帮助!