Tarjan算法为何能用一次DFS完成图论四大难题从强连通分量到桥与割点的完整LeetCode通关指南
1972年,Robert Tarjan发表了一篇不到五页的论文,提出了一个用单次深度优先搜索求解强连通分量的算法。这个算法不仅解决了有向图的核心问题,其核心思想——发现时间戳与追溯值的配合——后来被证明能够统一解决割点、桥检测、2-SAT可满足性等四大图论难题。Donald Knuth称其为"我最喜欢的实现之一"。 ...
1972年,Robert Tarjan发表了一篇不到五页的论文,提出了一个用单次深度优先搜索求解强连通分量的算法。这个算法不仅解决了有向图的核心问题,其核心思想——发现时间戳与追溯值的配合——后来被证明能够统一解决割点、桥检测、2-SAT可满足性等四大图论难题。Donald Knuth称其为"我最喜欢的实现之一"。 ...
在大型软件项目的构建过程中,模块之间存在复杂的依赖关系:A模块依赖B模块,B模块又依赖C模块。构建系统必须找到一个合法的编译顺序,确保每个模块在其依赖项编译完成后才开始编译。这个问题的数学本质就是拓扑排序——给定一个有向无环图(DAG),找到一个线性序列,使得对于每条有向边$u \to v$,顶点$u$都出现在顶点$v$之前。 ...
给定一个迷宫,从入口到出口有多条路径。你应该选择哪种策略?一种方式是沿着每条路一直走到底,走不通就返回上一个分叉口换条路——这就是深度优先搜索。另一种方式是先探索所有离入口距离为1的格子,再探索距离为2的格子,层层推进——这就是广度优先搜索。 ...
假设你需要生成数组 [1, 2, 3] 的所有排列。最直观的想法是写三重循环,每一层选择一个不同的元素——但如果数组长度是 10 呢?你需要写 10 层嵌套循环。更糟糕的是,如果数组长度不固定呢? ...