返回首页
最新
你最好的技巧是什么?你是如何非常规地使用任何工具的?
我正在开发一个用于二维网格的可达性检查器,具有以下特点:
- 使用 *O(1) 内存*
- 不需要 *预处理*
- 处理 *任意障碍物地图*
- 即使在大型网格上(例如,从左下角到右上角的 16,000×16,000),也能在 0.1 毫秒内完成
该检查器不依赖于广度优先搜索(BFS)、深度优先搜索(DFS)、A* 算法或洪水填充。
其核心思想是结合朝目标的贪婪移动和稳健的轮廓跟踪(墙壁追踪),在需要时切换方向并检测循环,以确保正确性。
该算法是完全确定性的,并保证对于任何地图和任何一对可行走的起点/终点的正确性。
我的动机是:
我希望使传统的洪水填充在任何仅用于可达性检查的项目中变得过时。
在许多实时系统(如游戏)中,当你只需要回答:“我能从 A 瓦片到达 B 瓦片吗?”时,完整的 BFS/DFS 或甚至区域预处理都是多余的。
以下是主要逻辑的 Swift 版本:
https://github.com/MatthiasGibis/2D-Grid-Reachability-Check/blob/main/mgReachabilityCheckGibis.swift
还有一个考虑 *高度差异* 的变体:
https://github.com/MatthiasGibis/2D-Grid-Reachability-Check/blob/main/mgReachabilityCheckGibisWithHeight.swift