如何找到两个细胞之间的路径中最狭窄的点
How to find the narrowest point in path between two cells in grid
我正在为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)算法。当然,在放置方面还有其他需要考虑的其他事情,例如塔本身的防御性。
- std::filesystem 和 std::experimental::filesystem 之间的路径差异
- Windows 和 Linux 之间的相对路径分辨率差异?
- 使用 Dijkstra 算法跟踪两个节点之间的最短路径
- 如何仅在 2 个节点之间获取最短路径,给定邻接列表有向图?
- 在由邻接列表表示的树中查找节点到另一个给定节点之间的路径
- 在结构函数之间传递文件路径 C++ 编辑:修复LNK2019错误
- 顶点对之间具有两条边不相交路径的数量
- 添加一个节点,并在通用树中的两个给定节点之间找到路径成本,其中c 中的儿童列表
- 查找树(不属于任何特定类型的简单连接树)中两个节点之间的路径
- switch 语句结束和下一条语句之间的时间是否具有确定性(与路径无关)
- 使用 Dijkstra 算法计算两个节点之间的最短路径
- 如何在BGL图中找到两个顶点之间的最短路径
- 如何找到两个细胞之间的路径中最狭窄的点
- 使用 BFS 查找 2 个节点之间的最短路径
- 图中边顶点之间的最短路径,不应是边本身
- 如何确定 BGL 中的 2 个顶点之间是否存在路径
- 图形组件之间的路径算法
- 如何找到 2 个顶点之间的所有可能路径
- 在树上应用 bfs 以查找两个顶点之间的最长路径
- 组织一个C++游戏的最佳方式是什么?该游戏涉及用户在路径之间进行选择,以便在旅程中前进