如何找到两个细胞之间的路径中最狭窄的点

How to find the narrowest point in path between two cells in grid

本文关键字:路径 之间 细胞 何找 两个      更新时间:2023-10-16

我正在为RTS游戏编写机器人(一个在网格地图上与另一个村庄对抗,还有交叉细胞 - 草,森林和不可折叠的细胞 - 水,山丘)。如何找到这两个细胞之间的路径上的最狭窄点?对算法有什么建议吗?(我正在使用*找到最接近的路径,我想启动塔架(强大的防御性建筑物),将最狭窄的点放在何处,以便敌人无法跨过 - 可能可以,可以取决于地图,但较少的可能性)。

一些想法。

考虑一个(也许太多)简化的版本,x在其上代表不可折叠的单元格,。代表交叉的,A代表一个村庄,B代表另一个村庄。

XXXA.XXXXX
XXX..XXXXX
XX.....XXX
XXX....XXX
XXX...XXXX
XXX.....XX
XXXX....XX
XXXX.BXXXX

由于连接两个村庄的道路上没有"分支",我们可以将地图转移到

    000A100000
    0001100000
    0011111000
    0001111000
   C0001110000D
    0001111100
    0000111100
    00001B0000

0和1意味着在单元格上旅行的成本。道路上的最狭窄点是花费最小的路径,从C到达D。

    000A100000
    ##########
    #01111100#
    #00111100#
   C#00111000#D
    0001111100
    0000111100
    00001B0000

由于原始地图的"道路"上的单元格的成本超过0,因此最小化C和D之间成本的最短路径确实会给道路上"最狭窄点"的位置线索。<<<<<<<<<<

好吧,这只是一个简化的版本,因为只有一条"主要道路"连接两个村庄。但是我希望它可以以某种方式指向解决方案的正确方向。

请记住,这甚至不一定是您想要的。考虑使用攻击范围t

的塔T
..t..
.ttt.
ttTtt
.ttt.
..t..       

和一个分支地图,其中有一个狭窄的直接路径和一个从点A到点B的宽间接路径。假设A标记的n周围的直接点是可以步行的,但对于塔而不可以建造。

xBxxxxxxx
x.......x
x.......x
x.......x
x..xx...x
x..xx...x
x..xx...x
x.......x
xnnn....x
xnnn....x
xAnxxxxxx

最初,字符将遵循路径p

xBxxxxxxx
xp......x
xp......x
xp......x
xp.xx...x
xp.xx...x
xp.xx...x
xp......x
xp......x
xp......x
xA.xxxxxx                   

T放置在最狭窄的点上,如果字符继续在同一路径上,将引起3次命中。但这不是塔的痛苦在速度的目标上,例如当然是致命的。相反,字符将被转移到较长的路径。

xBxxxxxxx
xp......x
xppppp..x
x.t..p..x
xttxxp..x
xtTxxp..x
xttxxp..x
x.t..p..x
x....p..x
xppppp..x
xA.xxxxxx

在这种情况下,更好的位置是保证至少一次命中的位置。(请记住,T的最佳位置靠近A是不可建造的。)

xBxxxxxxx
x.......x
x.......x
x.......x
x..xx...x
x..xx...x
x.txx...x
xttTtt..x
x.ttt...x
x..t....x
xA.xxxxxx

因此,您可能想要的是T的放置,该位置最大化了最低成本路径的成本,而T的放置将在上计算。查看最大值(Minimax)算法。当然,在放置方面还有其他需要考虑的其他事情,例如塔本身的防御性。