如何高效地使用二进制节点进行最短路径计算缓存?

我正在开发一款游戏,在游戏中我需要找到场景中两个节点之间的最短路径。

实际的路径查找处理很好,我们使用 A* 算法实现。 计算速度大部分情况下都很快,但是由于这是优化过的“声音扩散”(类似于 R6Siege),我们实际上不希望有太多实时的计算。尤其是当这将经常被要求时。

所以目前查找源节点和侦听节点之间的最短路径看起来是这样的。

绿色节点=路径节点

蓝色节点=“关闭”路径节点

红色=可破坏的墙

在这个例子中,可以看到房间右侧有一堵红色的墙。 这些节点被关闭是因为墙完好无损,但如果发生爆炸并且这些节点中的一个在爆炸半径内,那么该节点将被打开。

因此,在这种情况下,如果该节点被打开,则最短路径可能看起来像这样。

enter image description here

同样,如果您修复了墙壁,则该节点可能再次关闭。

现在我们面临的问题在于,我需要一种方法来“缓存”两个节点之间的最短路径,以及每个节点配置的所有最短路径。只有在墙上的节点才能被关闭,但即使有许多可破坏的墙壁,为每个节点的打开/关闭组合建立缓存/查找表,那似乎就像是庞大的数据/内存量,这似乎非常愚蠢,甚至不可能采用类似于蛮力的方法。

你们有什么建议吗?某种方式压缩数据,使得存储每个配置的缓存表的潜在内存不会太高?一些高端的数据结构?

我不是游戏开发的新手,但我对这类问题还是比较新的。

谢谢!:)

点赞