工程师面试题及答案.docxVIP

  • 0
  • 0
  • 约7.08千字
  • 约 23页
  • 2026-05-10 发布于四川
  • 举报

工程师面试题及答案

一、算法与数据结构

题目1:

设计一个算法,判断给定的有向图是否存在环。请详细描述你的思路,并分析时间复杂度。如果图以邻接表形式存储,顶点数为V,边数为E。

参考答案:

判断有向图是否存在环,可以使用深度优先搜索(DFS)配合顶点状态标记,或者使用拓扑排序(Kahn算法)。

方法一:基于DFS的三色标记法

1.为每个顶点定义三种状态:

未访问(0):尚未处理该顶点。

访问中(1):已开始处理该顶点及其后代,但尚未回溯完成。

已访问(2):该顶点及其所有后代均已处理完成。

2.从任意未访问顶点开始进行DFS遍历。

3.在DFS过程中:

将当前顶点标记为“访问中”。

递归访问其所有邻接顶点。

若发现某个邻接顶点状态为“访问中”,说明存在一条从该邻接顶点到当前顶点的后向边,即检测到环。

若所有邻接顶点处理完毕,将当前顶点标记为“已访问”。

4.若遍历所有顶点后未发现环,则图是无环的。

时间复杂度:O(V+E),因为需要访问每个顶点和每条边。

空间复杂度:O(V),用于存储顶点状态和递归栈。

方法二:基于入度的拓扑排序(Kahn算法)

1.计算每个顶点的入度。

2.将所有入度为0的顶点加入队列。

3.当队列非空时:

取出队首顶点,将其加入拓扑序。

遍历该顶点的所有邻接顶点,将其入度减1;若减后入度为0,则加入队列。

4.若最终拓扑序中的顶点数等于总顶点数V,则图无环

文档评论(0)

1亿VIP精品文档

相关文档