题解
题面描述
在视频应用 APP 中,有多个专区,每个专区可以包含多个栏目,称为栏目的上架。专区是顶层栏目,父对象为 root,用 -1 表示。一个专区内只能包含栏目,不能包含其他专区。栏目和专区的名称互不重复,且同一栏目可以被多个不同的专区或父栏目上架。由于运营人员的误操作,可能会出现栏目之间的死循环,即在从根节点到叶子节点的遍历过程中,出现重复的栏目名称,导致系统执行代码时陷入死循环,最终引发系统宕机。题目要求设计一个程序检测系统中的所有栏目死循环,并将其路径打印出来。如果没有检测到死循环,则输出 NotFound。
思路
这道题的核心是通过图的深度优先搜索(DFS)来检测栏目的死循环。首先,将每个上架关系解析为图的邻接表形式,其中父节点指向子节点。在遍历过程中,使用DFS从根节点 -1 开始递归地探索每个路径,同时维护一个路径栈和一个访问集合,以检测路径中是否存在重复的栏目节点。如果发现重复节点,说明出现了死循环,记录当前路径并停止继续递归。最后,对所有死循环路径进行排序和去重,如果没有检测到任何死循环,输出 NotFound。