@ninijia 在 Leetcode每日一题练习 ------ 802. 找到最终的安全状态 中发帖
从Leetcode 每日一题练习继续讨论:
802. 找到最终的安全状态
802. Find Eventual Safe States
题解
本题先考虑如何找到终结节点,根据题目如果一个节点上没有出边那么该节点就为终结节点,则遍历graph,所有没有出边的下标对应的节点均为终结节点。在遍历graph时,既可以得到所有节点对应的后继节点,也可以得到所有节点对应的全部前置节点,则对全部的终结节点,将其全部放入队列,遍历其全部的前置节点,这些节点均有指向终结节点的有向边,可能为安全节点,判断这些节点是否为安全节点,如果是则更新安全节点的状态数组,并将该节点放入队列中。不是则跳过继续向后遍历。如此反复即可得到全部安全节点。
这种方式可以得到结果的关键在于,以终结节点作为终点反向进行拓扑排序,先遍历到的指向终结节点的节点中只有仅包含指向终结节点一条边的节点会被认为是安全节点,再继续遍历得到的...