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