bugfix: Graph.is_dag must explore every vertex

This commit is contained in:
Simon Cruanes 2013-03-07 16:55:50 +01:00
parent 246f2949ea
commit 14ca51db92

View file

@ -213,14 +213,13 @@ let dfs graph first k =
(** Is the graph acyclic? *)
let is_dag g =
if is_empty g then true
else if Sequence.is_empty (roots g) then false (* DAGs have roots *)
else try
let labels = mk_v_table g in
(* do a DFS from each root; any back edge indicates a cycle *)
Sequence.iter
(fun v ->
dfs_full g ~labels ~back_edge:(fun _ -> raise Exit) v)
(roots g);
(vertices g);
true (* complete traversal without back edge *)
with Exit ->
false (* back edge detected! *)