力扣刷题笔记15.拓扑排序应用

1.喧闹和富有

 

 解题思路如下:

 

 

具体代码如下:

 

 2.找到最终的安全位置

 

 解题思路如下:

拓扑排序是找到图中入度为 0 的节点,以及仅由入度为 0 节点所指向的节点。 ,而本题是找到图中出度为 0 的节点,以及仅指向出度为 0 节点的节点。刚好是相反的情况,所以,我们将题目给定的有向图变为反图(也即有向边的起点、终点互换),那么所有安全点便可以通过拓扑排序来求解了。

接下来,我们简述一下拓扑排序的思想,并证明一下我们算法的有效性:
(1)将所有入度为 0 的点(原图中出度为 0 的点,也就是终点,最简单的安全点)加入队列。
(2)每次循环访问位于队头的节点(安全点);
(3)遍历以该节点为起点的所有有向边,将其从图中去掉,也即将将该点指向的所有点的入度减一。
(4)若某被指向点入度变为 00(意味着指向这个点的点均曾经被加入过队列,说明均为安全点),则将此点入队
(5)重复步骤(2)、(3)、(4)直至队空。

具体代码如下:

 

posted @ 2021-12-23 22:00  伞兵1号  阅读(157)  评论(0)    收藏  举报