Route Between Two Nodes in Graph
Example
Given graph:
for and t = E
, return
检测图中两点是否通路,图搜索的简单问题,DFS 或者 BFS 均可,注意检查是否有环即可。这里使用哈希表记录节点是否被处理较为方便。深搜时以起点出发,递归处理其邻居节点,需要注意的是处理邻居节点的循环时不是直接 return, 而只在找到路径为真时才返回 true, 否则会过早返回 false 而忽略后续可能满足条件的路径。
Java
根据构造函数的实现,Java 中判断是否有邻居节点时使用,而不是null
. 注意深搜前检测是否被处理过。行
复杂度分析
遍历所有点及边,时间复杂度为 O(V+E).
除了深搜处理邻居节点,我们也可以采用 BFS 结合队列处理,优点是不会爆栈,缺点是空间复杂度稍高和实现复杂点。
源码分析
时间复杂度同题解一,也是 O(V+E), 空间复杂度最坏情况下为两层多叉树,为 O(V+E).