在一个有向图中,我们从某个节点开始,每次沿着图的有向边走。 如果我们到达一个终端节点(也就是说,它没有指向外面的边),就停止。
现在,如果说我们的起始节点“最终是安全的”,当且仅当我们最终可以走到终端节点。 更具体地说,存在自然数K,对于任何行走的路线,我们必须在少于K步的情况下停在终端节点。
哪些节点是最终安全的? 返回它们升序排列的数组。
有向图具有N个节点,其标签为0, 1, ..., N-1,其中N是图的长度。 该图以下面的形式给出: graph[i]
是从i出发,通过边(i, j),所有能够到达的节点j组成的链表。
样例
样例1
输入: [[1,2],[2,3],[5],[0],[5],[],[]]
输出: [2,4,5,6]
样例2
输入: [[4,9],[3,5,7],[0,3,4,5,6,8],[7,8,9],[5,6,7,8],[6,7,8,9],[7,9],[8,9],[9],[]]
输出: [0,1,2,3,4,5,6,7,8,9]
分析
这道题给了我们一个有向图,然后定义了一种最终安全状态的结点,就是说该结点要在自然数K步内停止,所谓停止的意思,就是再没有向外的边,即没有出度,像上面例子中的结点5和6就是出度为0,因为graph[5]和graph[6]均为空。那么我们分析题目中的例子,除了没有出度的结点5和6之外,结点2和4也是安全状态结点,为啥呢,我们发现结点2和4都只能到达结点5,而结点5本身就是安全状态点,所以2和4也就是安全状态点了,所以我们可以得出的结论是,若某结点唯一能到达的结点是安全状态结点的话,那么该结点也同样是安全状态结点。那么我们就可以从没有出度的安全状态往回推,比如结点5,往