找到最终的安全状态

寻找安全节点

在一个有向图中,我们从某个节点开始,每次沿着图的有向边走。 如果我们到达一个终端节点(也就是说,它没有指向外面的边),就停止。

现在,如果说我们的起始节点“最终是安全的”,当且仅当我们最终可以走到终端节点。 更具体地说,存在自然数K,对于任何行走的路线,我们必须在少于K步的情况下停在终端节点。

哪些节点是最终安全的? 返回它们升序排列的数组。

有向图具有N个节点,其标签为0, 1, ..., N-1,其中N是图的长度。 该图以下面的形式给出: graph[i]是从i出发,通过边(i, j),所有能够到达的节点j组成的链表。

 

 

 

find-eventual-safe-states

 

样例

样例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,往
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值