我们可以自行规定,每当我们进入一个新的节点:
- 先turnLeft()遍历当前方向的节点
- 之后每次turnRight(),重复四次,保证我们遍历所有方向的子节点(这里要四次是因为起始节点需要遍历四个方向,非其实节点只需要遍历非入射方向)
- 最后turnLeft(),面向入射节点
注意第二步当中,有两种情况,如果当前方向子节点是wall,我们直接turnRight(),否则我们只从子节点回来,是和当初入射的方向相反,所以这个时候我们需要turnLeft()来保证我们下一次访问的是原入射方向右边的子节点。
时间复杂度O(V + E),做法的话递推课循环都可以,我们两个解法都给出,对图的dfs循环实现不清楚的话,可以参考这篇文章。
递归:
循环:
No comments:
Post a Comment