我正在制作一款赛车游戏,需要使用一种算法。地图/关卡/赛道是随机生成的,因此我需要找到起点和终点两个位置,以利用地图的大部分区域。
- 该算法将在二维空间内运作
- 从每个点出发,只能向四个方向之一移动:上、下、左、右
- 点只能是阻塞或非阻塞的,只有非阻塞的点才能被遍历
关于距离的计算,它不应该是“鸟的路径”(缺乏更好的词语)。如果A和B之间有墙壁(或其他阻塞区域),则它们之间的路径应该更长。
我不确定从哪里开始,欢迎评论,最好使用伪代码提供解决方案。
编辑:好的,在查看gs的代码后,我又尝试了一次。这次我使用的是C++,而不是Python。但即使我阅读了Dijkstra算法、floodfill和Hosam Alys的解决方案,我仍然没有发现任何关键的区别。我的代码仍然有效,但速度不如你所说的那么快。完整源代码位于pastie上。唯一有趣的行(我猜)是Dijkstra变体本身,位于第78-118行。
但速度不是主要问题。如果有人能够友好地指出算法之间的差异,我将非常感激。
- 在Hosam Aly的算法中,唯一的区别是他从边界开始扫描,而不是每个节点吗?
- 在Dijkstra算法中,你会跟踪并覆盖行走的距离,但在洪水填充算法中却不是这样,这就是其中的区别吗?