我正在尝试使用堆和数组来解决以下问题。
假设你有一个随机放置加油站的循环。所有加油站加起来的汽油都绰绰有余。你从一辆空车开始。找到您可以开始并能够返回的所有站点(完成循环)。假设您只能朝一个方向前进(没关系)。还假设你的油箱是无限的,mpg 总是不变的。
我想出的解决方案是构建一个最小堆,并有一个值从 0 到 n-1 的数组,以该顺序表示位置。
首先,您将汽油转换为里程,并从中减去到下一站的距离。你最终得到一个数组。称它们为 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]) 添加到它。重新堆砌。如果出现新的最小值(仅当 sum 创建最小值时),则在新最小值指向的数组中查找新的解决方案。
我的问题是如何用不同的语言实现数组和堆之间的链接。
谢谢。