题目地址:
代码如下
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Solution {
public List<List<Integer>> criticalConnections(int n, List<List<Integer>> connections) {
// 找到一个还没访问过的连通分量
// 将时间戳0传进去
}
// cur是当前遍历的点,parent是cur上一层递归遍历的点,cnt表示访问cur的时间戳(从0开始计数),
// ord记录每个顶点被访问的时间戳,low记录每个顶点能到达的时间戳最小的点的时间戳(这里的到达指的是非回头路的那种到达)
// 标记当前顶点为已访问
// 先初始化cur的ord和low为当前访问的时间戳
// 遍历cur的邻接点
// 对cur的邻接点进行算法逻辑。
// 如果未访问,则对其进行访问,回溯的时候看一下cur与next的边是否是桥,并更新low[cur];
// 如果不是parent但是已经访问,则直接更新low[cur];
// 如果是parent那直接略过
// 将时间戳加上1传递到下一层递归里去
// 发现了桥,加进答案中
// 回溯之前要用low[next]来更新low[cur]
// 如果next已经被访问过,但不是parent,那么cur就有可能从另一条路到达时间戳更早的点,更新low[cur]
// 邻接表建图