【发布时间】:2013-08-06 18:17:08
【问题描述】:
我必须开发一种与拓扑排序相关的 O(|V|+|E|) 算法,该算法在有向无环图 (DAG) 中确定从图的每个顶点到 t 的路径数(t 是出度为 0 的节点)。我对 DFS 进行了如下修改:
DFS(G,t):
for each vertex u ∈ V do
color(u) = WHITE
paths_to_t(u) = 0
for each vertex u ∈ V do
if color(u) == WHITE then
DFS-Visit(u,t)
DFS-Visit(u,t):
color(u) = GREY
for each v ∈ neighbors(u) do
if v == t then
paths_to_t(u) = paths_to_t(u) + 1
else then
if color(v) == WHITE then
DFS-Visit(v)
paths_to_t(u) = paths_to_t(u) + paths_to_t(v)
color(u) = BLACK
但我不确定这个算法是否与拓扑排序有关,或者我是否应该从另一个角度重新构建我的工作。
【问题讨论】:
-
我假设你的图是一个有向无环图(否则就没有必要谈论拓扑排序,也没有关于路径的数量,可能有无数个)
-
@amit 是的,我提出了“有向无环图”的问题。我已编辑添加“DAG”缩写
-
你的算法是正确的,你确实找到了方法的数量。而且你以一种拓扑正确的方式来做:一旦顶点 u 被涂成黑色,值 path_to_t(u) 就是正确的——它对应于在拓扑排序算法中将顶点推入堆栈。
标签: algorithm graph depth-first-search topological-sort