双链接堆和数组

时间:2013-08-16 23:50:57

标签: pointers heap

我正在尝试使用堆和数组来解决以下问题。

假设你有一个沿着它随机放置加油站的循环。所有车站都有足够多的燃气组合在一起循环。你从一辆空车开始。找到所有可以开始的站点并且能够返回(完成循环)。假设你只能朝一个方向前进(没关系)。还假设你的油箱是无限的,mpg总是不变的。

我想出的解决方案是构建一个最小堆,并按顺序使用值为0到n-1的数组来表示位置。

首先将气体转换为milage并从中减去到下一站的距离。你最终得到一个数组。称它们为V [0],V [1],... V [n-1]。

然后数组中的1指向V [0],m指向sum(V [0],... V [m-1]),0指向sum(V [0] ... V [N-1])。

总和放在最小堆中。

完成此操作后,最小值所指向的数组中的所有索引都是解决方案。

然后通过查找1指向的和,旋转到下一个配置,将sum(V [0] .. V [n-1])加到它上面。 Reheapify。如果出现一个新的最小值(仅当最小值加上总和时),则在新的最小值所指向的数组中查找新的解决方案。

我的问题是如何用不同的语言实现数组和堆之间的链接。

感谢。

0 个答案:

没有答案