确定 2 个节点之间是否存在路径的最有效方法是什么?

What is the most efficient way to determine if a path exists between 2 nodes?

我得到了一个 C 中的整数数组(表示节点的二维矩阵),它可以包含 0 或 1。给定 2 个“0”节点的坐标,我应该简单地找出它们之间是否存在 0 的路径(节点相邻连接——上、下、左、右)。

是否有比 BFS/DFS 更简单的替代方法来解决我的问题?我知道用BFS/DFS,我不仅可以确定路径的存在,还可以找到并return一个工作路径?只是想知道这对这个问题是否有点矫枉过正。

我相信一般情况下深度优先搜索(使用缓存以确保您只访问给定节点一次)通常是检查路径是否存在的最快方法。

如果您的数据是集群的,那么首先找到集群之间的连接可能会更快。如果您需要多次执行此检查,那么一次构建这些集群并在其上搜索会有很大帮助。

如果您了解有关图表的更多信息,则可能可以进行优化。例如,如果您知道任何连接的节点也必须是邻居,那么您将使用 BFS 而不是 DFS。如果您的图形具有某种空间(或类似)关系,那么 A* 可能比 DFS 更快。

在不了解您的具体情况的情况下,我想不出更有帮助的事情。要具体,您可以获得更高质量的答案。

编辑:重读你的问题,听起来你正在地图上寻找路径。我建议研究 A*,如果有许多长度相似的路径,它可能会更快。如果正确的路径比死胡同长得多,那么 DFS 可能仍然更快。

编辑 2,electric boogaloo:如果您在一张地图上多次执行此检查,并且只需要知道是否存在任何路径,那么最快的解决方案可能是在您的地图上进行洪水填充和标签区域。然后你需要做的就是检查你的两个点是否在同一个区域。