【算法笔记】Tarjan算法 【LeetCode 1192】

题目来源 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.必须在每层递归中判断成环(错误思路:先完成所有标记在判断成环)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值