1466. 重新规划路线
分析
- 建图:
- 将每条路线转化为一个无向图,并为每条边添加方向信息:
- 如果路线从城市
a -> b
,则图中添加边(a, b, true)
(表示这条边需要变更方向)- 同时添加反向边
(b, a, false)
(表示这条边方向正确,无需变更)
- 同时添加反向边
- 如果路线从城市
- 将每条路线转化为一个无向图,并为每条边添加方向信息:
- 深度优先搜索(
DFS
):- 从城市
0
开始遍历整个图,记录需要变更方向的边数:- 如果当前边方向不正确(
change == true
),则需要修改方向,计数器res
加1
- 如果当前边方向不正确(
- 继续递归访问相邻的未访问城市,确保整个图的连通性
- 从城市
- 返回结果:
- 最终
res
的值即为需要变更方向的最小路线数
- 最终
时间复杂度
图中包含 n - 1
条边,DFS 遍历每条边一次,时间复杂度为 O(n)
空间复杂度
- 存储图的邻接表需要
O(n)
的空间 - 访问标记数组
visited
和递归栈的空间复杂度为O(n)
总空间复杂度为 O(n)
C++代码
|
|