题目来源 LeetCode 1192
数据中心有 n 台服务器,分别按从 0 到 n-1 的方式进行了编号。它们之间以「服务器到服务器」点对点的形式相互连接组成了一个内部集群,其中连接 connections 是无向的。从形式上讲,connections[i] = [a, b] 表示服务器 a 和 b 之间形成连接。任何服务器都可以直接或者间接地通过网络到达任何其他服务器。
「关键连接」 是在该集群中的重要连接,也就是说,假如我们将它移除,便会导致某些服务器无法访问其他服务器。
请你以任意顺序返回该集群内的所有 「关键连接」。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/critical-connections-in-a-network
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题目分析
该题可看作是搜索无向图结构内的环,可用Tarjan算法解决。
思路:
1.预处理数据,方便快速查询任一节点所相邻的节点。
2.深度遍历节点,在访问到某节点时,标记为已访问,标记时间戳。
递归:
3.递归至某节点:查询相邻(所有)节点 x(跳过其父节点)若x未访问,对x继续进行深度遍历,返回后比较当前节点时间戳和x的时间戳,若x更大,说明不成环,加入该连接至答案。
4.若已访问,说明成环。
对于情况【3】【4】,统一操作:当前节点时间戳更新为所有相邻节点时间戳(不包括父节点)以及当前节点时间戳中的最小值。
5.该层递归结束。
解题关键:
1.理解时间戳,对时间戳的更新要比较所有相邻节点(不含父节点)递归返回后的时间戳。
2.必须在每层递归中判断成环(错误思路:先完成所有标记在判断成环)