【发布时间】:2010-10-03 10:02:02
【问题描述】:
我正在寻找一种用于我正在制作的赛车游戏中的算法。地图/关卡/轨道是随机生成的,所以我需要找到两个位置,起点和目标,以充分利用地图。
- 算法在二维空间内工作
- 从每个点只能从四个方向遍历到下一个点;上、下、左、右
- 点只能被阻塞或非阻塞,只能遍历非阻塞点
关于距离的计算,它不应该是“鸟道”,因为缺少更好的词。如果 A 和 B 之间有墙(或其他阻挡区域),则 A 和 B 之间的路径应该更长。
我不确定从哪里开始,非常欢迎 cmets 并且建议的解决方案在伪代码中是首选。
编辑:正确。在浏览了gs's code 之后,我又试了一次。这次我用 C++ 编写而不是 python。但是,即使在阅读了Dijkstras algorithm、floodfill 和Hosam Alys solution 之后,我仍然没有发现任何关键的区别。我的代码仍然有效,但没有你看起来运行的那么快。完整来源在pastie。唯一有趣的行(我猜)是第 78-118 行的 Dijkstra 变体本身。
但速度不是这里的主要问题。如果有人愿意指出算法中的差异,我将非常感谢您的帮助。
- 在 Hosam Alys 算法中,他从边界而不是每个节点扫描的唯一区别是?
- 在 Dijkstras 中,您会跟踪并覆盖步行距离,但不会在洪水填充中,但仅此而已?
【问题讨论】:
-
你的地图/关卡/轨迹是什么样的?例如,它是矩形的吗?可以分成大小均匀的正方形吗?
-
是的。关卡上的每个点/图块都是一个正方形,在所有四个方向上都有可能的路径,假设相邻点/图块没有被阻挡。
-
地图可以有多大?最多多少分?
-
不会很大。但理论上,没有限制。在我的应用程序中,两个轴上的 150-200 点将被视为“大”。
-
嗯,你需要多快?我想 O(n^3) 内的任何东西都可以,不是吗?
标签: algorithm math path distance path-finding